gpt4 book ai didi

c - 静态内存分配和可移植性

转载 作者:行者123 更新时间:2023-12-01 10:14:10 24 4
gpt4 key购买 nike

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

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

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

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

最佳答案

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

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

您可以将 exe 文件想象成一种由操作系统进程加载器加载到新内存空间的内存镜像。操作系统维护此位置的偏移量,并确保所有程序内存访问都进入其进程的 protected 地址空间。

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

关于c - 静态内存分配和可移植性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2765324/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com