gpt4 book ai didi

c - 编译这个程序如何填满我的电脑?

转载 作者:太空狗 更新时间:2023-10-29 15:44:57 24 4
gpt4 key购买 nike

int main[-1U] = {1};

非常简单。编译它

gcc foo.c

不会生成任何文件(至少当我在后台挂起 GCC gcc & : 时,我无法使用 lsof 找到它),但是 16 GiB 的 < strong>二级存储(硬盘)会被吃掉。

这是如何工作的?

最佳答案

你可以用一个简单的 printf 来解开这个谜团:

printf("%zu\n", (size_t)-1U);

这会产生 4294967295 ( demo ) - 足以在 sizeof(int) 等于 4 的系统上填充 16Gb 内存.

要了解为什么这会在文件系统中占用如此多的空间,请将 foo 编译为目标文件,然后运行 ​​size 实用程序。

我修改了程序,将数组的大小设置为 1,000,000 个元素。以下是您通过运行 size 获得的输出:

$ gcc -c foo.c
$ size -A -d foo.o
foo.o :
section size addr
__text 0 0
__data 4000000 0
Total 4000000

__data 段包含初始化数据。编译器会填充它,因为您提供了 {1} 初始值设定项。如果省略它,磁盘上可执行文件的大小将缩小到几千字节,因为数组将被放入未初始化的段中:

$ size -A -d foo.o
foo.o :
section size addr
__text 0 0
Total 0

关于c - 编译这个程序如何填满我的电脑?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47476071/

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