3 ms·
No real difference: for (size_t i = 1; i < WHATEVER; i <<= 1) { char vla[i]; vla[0] = 0; vla[i - 1] = 0; ... } that is, you can still
by cryptonector 5y ago
No real difference:
for (size_t i = 1; i < WHATEVER; i <<= 1) {
char vla[i];
vla[0] = 0;
vla[i - 1] = 0;
...
}
that is, you can still exhaust your stack trivially with VLAs.
Sure, the two things have a different "API", but as far as allocating arbitrary amounts of memory goes, they both let you do it.
- wahern 5y agoI'm not sure what your point is. You could replace the VLA with malloc in that example and exhaust your entire VM space. In the rare cases where VLAs might prove useful, e.g. a vector math library (IIRC, a major reason for VLAs was to help FORTRAN programmers transition to C), this difference absolutely does matter in reality.
- cryptonector 5y agoMaybe I missed the point of your comment. Mine is that the scoping difference between VLAs and alloca() isn't relevant to the question at hand of how to protect against memory corruption due to large stack allocations.