1
19
第二个问题的答案(在大多数现代操作系统上)是虚拟内存。 从硬件层开始,使用物理内存。那是你可以用手指戳的东西。这就是操作系统所看到的。操作系统允许您在称为虚拟内存的抽象上运行进程。 每个进程都有自己的虚拟内存空间。所以它可以假装它是唯一正在运行的进程,并且它有大量的内存。然后每次访问内存时,都会提供一个虚拟地址,该地址会映射到一个物理地址。操作系统保留一个表,其中虚拟地址映射到RAM中的实际物理地址。通常,出于性能考虑,这也可以通过一些特殊的硬件(MMU,内存管理单元)来实现,但也可以100%通过软件来实现。 所以当你在程序中说0x000时,那是一个虚拟地址。当你读或写的时候,它被计算机翻译成一个物理地址。所以在另一个进程中,相同的虚拟地址0x000映射到不同的物理地址。这个系统可以让你写你的程序,而不知道到底有多少内存可用,或你的程序将加载到什么地址。它还可以防止程序破坏属于另一个程序的内存。 至于第一部分,绝对是。不同类型的数据占用不同的内存量。您必须知道在布局数据结构时需要多少空间。还需要记住字节对齐问题。多字节数据类型(如浮点数)通常必须从可被2或4整除的地址或存储浮点所需的字节数开始—这是处理器或RAM的要求。所以你不能一个字节接一个字节地把所有的数据放在一起,如果你想最小化未使用的内存,你就必须按照特定的顺序来排列数据,就像把拼图拼凑在一起一样。 |
2
5
这不完全是一个答案,但在这本书中有答案。我只能推荐它。它会教你一些基础知识,就像名字上说的,它是从头开始编程。 |
3
1
取决于目标和内存类型(RAM、ROM等)。如果你在谈论一个小型的嵌入式项目RAM,你可能只需要跟踪几个文件,micro的数据表会告诉你不同的内存区域寻址。在有多个“模块”的情况下,可以使用链接器将对象文件链接到可执行文件中。链接器可以重新分配内存地址,这样它们就不会重叠,或者您可以有一个定义了所有内存位置的中心文件,其他模块将此作为资源。对不起的。这是一个有很多答案的大问题。 |
TheKing · 为什么数组的地址可以有负值? 2 年前 |
yurnero · MATLAB:“加载”一个快速访问功能 6 年前 |
joe · 一页可以同时在两个工作集中吗? 6 年前 |
Jaques · “.exe”已触发断点 6 年前 |
adn bps · 在函数中修改变量的高效内存方法 6 年前 |
Gauraang Khurana · C语言中分段错误的不稳定行为 6 年前 |
Rajesh K · 如何查找设备中存在的广告垃圾? 6 年前 |