You correctly pointed out the use of stack allocated (and dynamically sized arrays) and yes, most people have not yet heard of the latter.
However, I think that there should be a giant health warning attached to this:
the total size of a stack allocated array is limited by the maximum size of the stack. Typically, there is *no* warning given if you exceed this size.
e.g.:
foo(int len)
{
int array[len];
}
if you call foo with (say) 1200000, then, at least under gcc, the array will be silently given a garbage value and you use it at your own (and your customer's) risk. It is not clear what the maximum safe size of a dynamically sized array is, but gcc seems to limit it to 64K bytes.
The same applies to alloca'd memory - if its too big you get silent garbage.
by Frank McCabe — Feb 21
However, I think that there should be a giant health warning attached to this:
the total size of a stack allocated array is limited by the maximum size of the stack. Typically, there is *no* warning given if you exceed this size.
e.g.:
foo(int len)
{
int array[len];
}
if you call foo with (say) 1200000, then, at least under gcc, the array will be silently given a garbage value and you use it at your own (and your customer's) risk. It is not clear what the maximum safe size of a dynamically sized array is, but gcc seems to limit it to 64K bytes.
The same applies to alloca'd memory - if its too big you get silent garbage.