问题描述
我对数组的大小如何改变C程序中二进制文件的大小有一些疑问。
#include <stdio.h>
#include <stdlib.h>
void f()
{
int array[1000];
for (int i = 0; i < 1000; i++)
array[i] = i;
}
int main(void)
{
float m[1000];
for (int i = 0; i < 1000; i++)
m[i] = 2 * i;
f();
return 0;
}
这是一个愚蠢的例子,但我认为它可以帮助说明我的问题: 数组( m 和 array )会影响二进制文件的大小吗?如果是这样,怎么办? 如果我从不调用函数 f(),二进制文件中还会仍然存在 array ,从而影响其大小吗? 如果 f()在外部(静态)库上,则最终二进制大小如何变化?
我尝试使用 size 命令进行实验,无论数组的大小如何,二进制文件的大小始终相同。
我希望我的问题足够清楚。谢谢。干杯。
解决方法
数组(m和数组)是否影响二进制文件的大小?如果可以,怎么办?
否,这些数组是在堆栈上分配的,因此只会影响堆栈,而不会影响磁盘上的大小
如果我从不调用函数f(),数组是否仍然存在于二进制文件中,从而影响其大小?
答案和上面一样。
如果f()在外部(静态)库上,则最终二进制大小如何变化?
它将与某些字节有所不同(动态链接条目的大小与该函数的机器代码的大小)