gpt4 book ai didi

c++ - 堆、栈和数据内存单元的大小

转载 作者:太空宇宙 更新时间:2023-11-04 03:51:52 24 4
gpt4 key购买 nike

这个问题有几个部分。

根据网上的大部分资源和教科书,堆内存和栈内存的增长方向相反。

  1. Heap 和 Stack 是否总是以相反的方向彼此增长,尤其是当操作系统为 Heap 内存分配额外内存时?

  2. 考虑一下,最初在程序中,只发生堆分配并且使用最少的堆栈内存。因此,Heap 将覆盖为 Stack 和 heap 分配的几乎整个组合内存。之后,Stack 开始增长。是否会抛出错误或是否会为堆栈分配新的内存位置以使其增长到其最大限制(最大限制=“ulimit -s”命令显示的限制)?如果可以分配新的位置,那么是否违反了 Stack 中地址总是按顺序分配的条件?

  3. 数据段中存储的已初始化和未初始化变量的内存使用是否有任何预定义的限制?

最佳答案

答案:

Do Heap and Stack actually always grow in opposite directions towards each other,
especially when extra memory is allocated by the OS for Heap memory?

堆和栈是一个实现细节,不是语言规范所要求的。它们生长的方向不一定朝向彼此;他们可以随心所欲地成长。

Consider that initially in the program,  
only heap allocations take place and minimal Stack memory is used.
Hence, Heap will cover almost entire combined memory allocated
for Stack and heap. Afterwards, Stack starts to grow.
Will an error be thrown or will new memory location be allotted
for Stack to grow to its maximum limit
(maximum limit = limit shown by "ulimit -s" command)?
If new location can be allotted, then doesn't it violate the condition
that in Stack addresses are always assigned in order?

如果您的堆和堆栈向彼此增长,则可能会发生覆盖。如果您的内存分配器检查空间不足或者您有一个检查运行时堆栈分配的实用程序,您只会收到溢出通知。请记住,并非所有平台都是 Linux 或 Windows PC;许多是受限嵌入式系统。

Is there any pre-defined limit on the memory usage  
by initialized and uninitialized variables
stored in Data section?

是的,变量必须在某处有内存。操作系统可以将变量分页到外部设备。有可能变量不是变量而是硬件寄存器。同样,这都是特定于平台的。语言标准强加的规则是变量必须是可寻址的,静态或自动变量必须具有唯一地址(单一定义规则,ODR)。

关于c++ - 堆、栈和数据内存单元的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20059964/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com