If structures places data to stack why we do not getting stackoverflow on array of structures?

Biotronic via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Wed Aug 16 01:29:32 PDT 2017


On Wednesday, 16 August 2017 at 07:39:01 UTC, Suliman wrote:
>> On the heap, unless you are allocating it via e.g. alloca.
>
> If
> struct MyStruct
> {
>  int x;
>  int y;
> }
>
> MyStruct mystruct;
>
> is located on stack, why:
>
> MyStruct [] mystructs;
>
> should located on heap?

MyStruct[] is actually a struct similar to this:

struct MyStruct[] {
     MyStruct* ptr;
     size_t length;
}

That struct is placed on the stack, but the data it points to, 
via the ptr field, is heap allocated.

One explanation of why is that the compiler doesn't know how many 
elements are in the array, and that that number may change. If it 
was stack-allocated and a new element was added to the array, 
everything on the stack would have to be moved.

If the compiler does know the number of elements, it can allocate 
the array on the stack (theoretically, this could be done as an 
optimization, but in practice I don't think it is). You can give 
the compiler this information:

MyStruct[10] mystructs;

This will allocate 10 MyStructs (80 bytes) on the stack, and if 
you change 10 to a large number, will give a stack overflow.

--
   Biotronic


More information about the Digitalmars-d-learn mailing list