我正在开发内存数据库作为侧面项目,应该是轻量级的。自从上学以来,我没有在C上发表演讲,而且我对计算机架构的了解有限......
我想知道如何准确计算我的程序将占用多少内存以及从哪种内存(RAM,寄存器......)。 最明显的是我通过malloc分配的所有内容。对不起,如果以下问题有点随机......
这个主题很大,所以请不要犹豫,把我指向一本书或一个网站。我想这不仅仅是关于C,而是关于计算机体系结构,汇编代码等等。
答案 0 :(得分:3)
我假设是典型的计算平台,而不是嵌入式系统。
全局变量将存储在RAM中?关键字static(限制范围)会影响什么吗?
仅当操作系统认为最适合RAM时,全局变量才会存储在RAM中。范围没有效果。
是否所有全局变量都是同时分配的,还是在第一次访问时可以延迟分配?
这取决于“分配”的含义。通常,虚拟内存(地址空间)一次性分配,但物理内存(RAM)根据需要进行分配。
可执行文件是否已加载到内存中? 1MB的可执行文件是否需要1MB才能执行?
在程序启动时映射到内存。它实际上是根据需要加载到物理内存中,并在操作系统认为合适的情况下从物理内存中逐出。
我强烈怀疑你正在寻找非常复杂问题的简单答案。
答案 1 :(得分:1)
答案 2 :(得分:1)
Oups,这是一个有趣的问题,但答案与往常一样:取决于它!
您的问题严重依赖于实施。在旧的(现在过时的)系统中,存在叠加的概念:部分代码仅在需要时才加载到内存中。我不认为它仍然用于现代虚拟内存系统,但它可能对具有有限资源的嵌入式系统有意义。
一些编译器通常可以选择确定堆栈的大小。它可以决定轻量级程序。
并且显然依赖于体系结构:在Unix-Linux上,你有elf与a.out格式,具有不同的内存需求和管理,在Windows上,仍然有旧的.com格式可以导致非常小的可执行文件