【发布时间】:2014-12-10 11:17:57
【问题描述】:
我正在开发一个内存数据库作为一个应该是轻量级的副项目。我从学校开始就没有学过 C,而且我对计算机架构的了解有限......
我想知道如何准确计算我的程序将占用多少内存以及来自哪种内存(RAM、寄存器、...)。 最明显的是我通过 malloc 分配的所有内容。对不起,如果以下问题有点随机......
- 全局变量将存储在 RAM 中吗?关键字 static(限制范围)是否有影响?
- 是所有全局变量同时分配还是在首次访问时延迟分配?
- 可执行文件是否已加载到内存中? 1MB 的可执行文件是否需要 1MB 来执行?
这个主题相当大,所以不要犹豫,给我指一本书或一个网站。我想这不仅仅是关于 C 语言,还有更多关于计算机体系结构、汇编代码等。
【问题讨论】:
-
我很惊讶拥有 2k 代表的会员会问这样的问题。请具体
-
如果您使用的是现代桌面操作系统,则可执行文件中的所有部分都映射到进程内存映射中,但文件的所有部分或部分实际上都不是被加载到内存中,当它被加载到内存中时,程序及其分配的内存可能根本不在 RAM 中,而是换出到磁盘中(它全部在“内存”中,但不在 RAM 内存中)。
-
另请参阅 C 程序的内存布局
-
此链接描述了 C 程序的内存布局,并包含指向相关材料的更多链接。 geeksforgeeks.org/memory-layout-of-c-program
-
@darknight 我是一个非常优秀的 Java 开发人员,但显然是一个糟糕的 C 程序员。内存并不是你在 Java 中首先关心的问题^^
标签: c memory assembly memory-management