Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Suggested max size for stack allocations

Assuming a need of a buffer with fixed size, is there a size limit or threshold, such that under that size limit it's OK to use a fast stack-allocated std::array, and above that limit it's better to use a std::vector with memory allocated dynamically from the heap (since stack memory is precious and shouldn't be consumed much)?

// I think allocating 32 bytes on the stack is just fine.
std::array<BYTE, 32> smallBuffer;

// For 32KB, it's better getting memory from the heap.
std::vector<BYTE> bigBuffer(32*1024);

// Is it better to allocate a 1KB buffer on the stack (with std::array)
// or is it too much, and it's better to allocate on the heap (using std::vector)?
// What about 512 bytes? And 4KB?
// Is there a suggested size threshold?
std::array<BYTE, 1024> buffer;
like image 284
Mr.C64 Avatar asked Apr 05 '14 15:04

Mr.C64


1 Answers

There is no official limit. You could grow or reduce the default stack size on every system.

The default warning on stack size is 16 Kb for Visual Studio user mode application and 1 Kb in kernel mode. Some static analyser tools use the same limit for warning.

warning C6262: Function uses '30000' bytes of stack: exceeds /analyze:stacksize'16384'. Consider moving some data to heap

https://docs.microsoft.com/en-us/cpp/code-quality/c6262

It's only a warning, but it could be considered as a recommended stack allocation limit.

like image 102
ColdCat Avatar answered Oct 18 '22 05:10

ColdCat