有一个c内存模型如下:
+--------+ Last Address of RAM
| Stack |
| | |
| v |
+--------+
RAM | |
| |
+--------+
| ^ |
| | |
| Heap |
+--------+
| ZI |
+--------+
| RW |
+========+ First Address of RAM
堆栈和堆空间以相反的方向增加。它们会在中间相互重叠。
所以我的问题是:
- 裸机环境下,malloc什么时候返回NULL?
- 在裸机环境下,如何防止栈与堆重叠?
如果您使用静态的编译时内存布局,@WikiWang 是正确的(edit虽然你必须告诉你的malloc
以某种方式实现堆末尾所在的位置)。
如果不是,并且假设您指的是裸机,则它取决于您的板支持包中的 C 库实现。图书馆必须提供一些实现brk(2) http://linux.die.net/man/2/sbrk或具有类似效果的函数。malloc
在由设置的内存区域内工作brk
or sbrk
。例如,请参阅malloc源 https://fossies.org/dox/glibc-2.24/malloc_8c_source.html#l02491调用宏MORECORE
,默认情况下sbrk
。您的 C 库必须使用内核调用以外的其他方法来实现这一点:)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)