静态内存分配&可移植性

时间:2010-05-04 12:45:23

标签: c memory compiler-construction static operating-system

我读过静态内存分配是在编译时完成的。

生成可执行文件时是否使用了“已分配的地址”?

现在,我怀疑当代码可执行文件完全传输到新系统时如何处理内存分配。

我搜索了它,但我没有在互联网上得到任何答案。

1 个答案:

答案 0 :(得分:3)

嗯,完全取决于您的可执行文件是否可以在新系统上运行的情况。每个操作系统都定义了它自己的可执行文件格式。例如,here's windows exe的外观如何。这就是他们被称为可移植可执行文件的原因。

当您的编译器生成这样的可执行文件时,它首先将C代码编译到目标体系结构的相应程序集,然后将其打包为目标可执行文件格式。静态内存分配以该格式找到它们的位置。

您可以将exe文件想象为操作系统进程加载器加载到新内存空间的内存映像的类型。操作系统维护到该位置的偏移量,并确保所有程序存储器访问进入其进程的受保护地址空间。

回答您的具体问题:在同一操作系统和体系结构的系统之间传输可执行文件通常没有问题。操作系统通常可以通过仿真来处理相同操作系统但不同机器架构的场景(例如,Mac OS的Rosetta在x86上模拟PowerPC)。 64/32位兼容性也是这样处理的。通常不可能在不同的操作系统之间进行传输(对于本机可执行文件),但在虚拟机(java vm,.net CLR)中工作的所有内容都没有问题,因为进程加载程序仅加载虚拟机并且从那里运行实际程序。