Давайте рассмотрим этот код:
static const size_t DATA_SIZE = 100000;
void log_msg(const char* msg)
{
char msg_buffer[DATA_SIZE];
// Do something...
}
int main()
{
// Do something heap-memory consuming...
unsigned char buffer = new unsigned char[DATA_SIZE];
if(!buffer)
{
log_msg("Insufficient memory!");
return 1;
}
// Go ahead...
delete[] buffer;
return 0;
}
Теперь давайте представим, что в момент выделения памяти в куче для buffer
нет свободного места И, в то же время, естьдостаточно свободного места в стеке.
Мой вопрос довольно прост: будет ли ВСЕГДА ошибочным выделение в стеке для msg_buffer
, если выделение для buffer
в куче ошибочно?
Насколько я знаю, стек выделяется для каждого потока, а куча - для процесса.Итак, есть ли гарантия, что результат выделения памяти в стеке не будет коррелировать с результатом выделения памяти в куче?Конечно, я не считаю переполнение стека само по себе.Другими словами, полностью ли зарезервирована память, зарезервированная для стека?Или могут быть ситуации, когда по какой-то причине во время выполнения программы это резервирование может быть сокращено?
Если нет никаких независимых от платформы утверждений, касающихся этого, тогда я мог бы знать, существуют ли такие для случая Linux для архитектуры x86.