c 和java 内存,C分配和内存开销
可能会让年轻的开发人员感到惊讶,因为像我这样老的老用户曾经用1或2k RAM的系统用C语言编写 .
在这种规模的系统中,动态内存分配将是我们无法承受的奢侈品 . 它不仅仅是管理免费存储的指针开销,还有免费存储碎片的影响,使内存分配效率低下,很可能导致致命的内存不足(虚拟内存不是一种选择) .
因此我们习惯使用静态内存分配(即全局变量),对所有嵌套的函数深度进行非常严格的控制,并对嵌套中断处理进行更严格的控制 .
在这些系统上书写时,我甚至没有链接标准库 . 我编写了自己的C启动例程并提供了自定义的最小I / O例程 .
我在2k ram系统中编写的一个程序使用RAM的下半部分作为数据区域,上部部分作为堆栈 . 在最后的剪辑中,我证明了堆栈的最大使用量在内存中达到了目前为止距离数据区域中的最后一个变量1个字节 .
啊,过去的美好时光......
编辑:
要具体回答您的问题,原始的K&R免费商店经理用于将 Headers 块添加到通过 malloc 分配的每个内存块的开头 .
Headers 块看起来像这样:
union header {
struct {
union header *ptr;
unsigned size;
} s;
};
其中 ptr 是下一个 Headers 块的地址,大小是分配的内存大小(以块为单位) . malloc 函数实际上将返回 &header + sizeof(header) 计算的地址 . 自由函数将从您提供的指针中减去 Headers 的大小,以便将块重新链接回空闲列表 .
总结
以上是生活随笔为你收集整理的c 和java 内存,C分配和内存开销的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: php 时间 插件,PHP中Carbon
- 下一篇: dataframe 转rdd java,