c - malloc 何时在裸机环境中返回 NULL?

标签 c stack arm bare-metal

有一个c内存模型如下:

      +--------+   Last Address of RAM
      | Stack  |
      |   |    |
      |   v    |
      +--------+
RAM   |        |
      |        |
      +--------+
      |   ^    |
      |   |    |
      | Heap   |
      +--------+
      |   ZI   |
      +--------+
      |   RW   |  
      +========+  First Address of RAM

栈和堆空间的增加方向相反。它们会在中间相互重叠。 所以我的问题是:

  • 在裸机环境中,malloc 什么时候返回 NULL?
  • 在裸机环境下,如何防止栈与堆重叠?

最佳答案

@WikiWang 如果您使用静态的编译时内存布局是正确的(编辑 尽管您必须以某种方式告诉您的malloc 实现堆的末尾在哪里是)。

如果不是,并且假设您指的是裸机,则它取决于板级支持包中的 C 库实现。该库必须提供一些 brk(2) 的实现或具有类似效果的功能。 mallocbrksbrk 设置的内存区域内工作。例如,请参阅 malloc source调用宏 MORECORE,默认为 sbrk。您的 C 库将不得不为此使用内核调用以外的东西 :)。

关于c - malloc 何时在裸机环境中返回 NULL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39113658/

相关文章:

java - JVMTI 分析 : calculating the amount of stack memory

linux - ARM MMU 和 ARM Linux 页表遍历

linux - _start 可以作为缩略图函数吗?

c - "Magic ring buffer"在Linux内核空间的实现?

java - 处理语言、java程序中识别字符串的堆栈

c - gcc 在 amd64 上支持 128 位 int 吗?

c - 如何修复此段错误?

铿锵C block : block function definition after call

c - 一堆纸牌和 war 游戏

c - 如何重置 c 中的链表?