gpt4 book ai didi

c - 最低 504Kb 内存使用量

转载 作者:IT王子 更新时间:2023-10-28 23:35:43 29 4
gpt4 key购买 nike

在学习 C 的同时做一些实验,我遇到了一些奇怪的事情。这是我的程序:

int main(void) {sleep(5);}

当它被编译时,可执行文件的文件大小为 8496 字节(与 26 字节的源代码相比!)这是可以理解的,因为调用了 sleep 并且在可执行文件中写入了调用指令。另一点是没有 sleep ,可执行文件变成 4312 字节。

int main(void) {}

我的主要问题是当第一个程序运行时会发生什么。我使用 clang 编译和 Mac OS X 运行它。结果(根据事件监视器)是程序使用了 504KB 的“真实内存”。为什么程序只有 4KB 就这么大?我假设可执行文件已加载到内存中,但除了 sleep 调用之外我没有做任何事情。为什么我的程序需要 500KB 才能休眠 5 秒?

顺便说一句,我使用 sleep 的原因是首先能够捕捉到使用事件监视器正在使用的内存量。

我只是出于好奇而问,干杯!

最佳答案

当你编译一个 C 程序时,它被链接到一个可执行文件中。即使您的程序非常小,它也会链接到 C 运行时,其中将包含一些额外的代码。可能会有一些错误处理,这种错误处理可能会写入控制台,并且此代码可能包含 sprintf ,这会为您的应用程序增加一些占用空间。您可以请求链接器在可执行文件中生成代码映射,以查看实际包含的内容。

此外,可执行文件包含的不仅仅是机器代码。将有各种用于数据和动态链接的表,这将增加可执行文件的大小,也可能会浪费一些空间,因为各个部分都存储在 block 中。

C 运行时将在调用 main 之前初始化,这将导致加载一些代码(例如,通过动态链接到各种操作系统功能)以及为堆分配内存,每个线程的堆栈,可能还有一些静态数据。并非所有这些数据都可能显示为“真实内存”——OS X 上的默认堆栈大小似乎是 8 MB,而您的应用程序使用的仍然比这少得多。

关于c - 最低 504Kb 内存使用量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19356823/

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