Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Programmatically find maximum static array size in C++

Tags:

c++

memory

I am curious whether it is possible to determine the maximum size that an array can have in C++.

    #include <iostream>

    using namespace std;

    #define MAX 2000000

    int main()
    {
      long array[MAX];
      cout << "Message" << endl;
      return 0;
    }

This compiles just fine, but then segfaults as soon as I run it (even though array isn't actually referenced). I know it's the array size too because if I change it to 1000000 it runs just fine.

So, is there some define somewhere or some way of having #define MAX MAX_ALLOWED_ARRAY_SIZE_FOR_MY_MACHINE_DEFINED_SOMEWHERE_FOR_ME?

I don't actually need this for anything, this question is for curiosity's sake.

like image 361
SirGuy Avatar asked Mar 31 '12 05:03

SirGuy


2 Answers

There isn't a way to determine this statically, because the actual limit depends on how much stack space your thread has been given. You could create a new thread, give it 10 megabytes of stack, and you would be able to allocate a correspondingly larger local array.

The amount you can allocate on the stack also depends on how much has already been used so far.

like image 169
Greg Hewgill Avatar answered Oct 02 '22 08:10

Greg Hewgill


void foo(int level){
 int dummy[100];
 cerr<<level<<endl;
 foo(level+1); 
}

Then, maybe you can multiply the last printed level with 400 bytes. Recursive calls occupy most of the stack space I guess but you can get a lower-bound. I may miss some understanding of memory management here, so open to corrections.

So this is what I got on my machine with varying dummy array size.

level   array size    stack total
24257     100      9702800
 2597    1000     10388000
  260   10000     10400000
  129   20000     10320000
   64   40000     10240000
   25  100000     10000000
   12  200000      9600000
like image 22
tartar Avatar answered Oct 02 '22 10:10

tartar