有一个c内存模型如下:
+--------+ Last Address of RAM
| Stack |
| | |
| v |
+--------+
RAM | |
| |
+--------+
| ^ |
| | |
| Heap |
+--------+
| ZI |
+--------+
| RW |
+========+ First Address of RAM
栈和堆空间的增加方向相反。它们会在中间相互重叠。 所以我的问题是:
- 在裸机环境中,malloc 什么时候返回 NULL?
- 在裸机环境下,如何防止栈与堆重叠?
最佳答案
@WikiWang 如果您使用静态的编译时内存布局是正确的(编辑 尽管您必须以某种方式告诉您的malloc
实现堆的末尾在哪里是)。
如果不是,并且假设您指的是裸机,则它取决于板级支持包中的 C 库实现。该库必须提供一些 brk(2)
的实现或具有类似效果的功能。 malloc
在 brk
或 sbrk
设置的内存区域内工作。例如,请参阅 malloc source调用宏 MORECORE
,默认为 sbrk
。您的 C 库将不得不为此使用内核调用以外的东西 :)。
关于c - malloc 何时在裸机环境中返回 NULL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39113658/