裸机环境下malloc什么时候返回NULL?

2024-01-25

有一个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(使用前将#替换为@)

裸机环境下malloc什么时候返回NULL? 的相关文章

随机推荐