C中的数组,函数调用和目标文件

问题描述

我对数组的大小如何改变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()在外部(静态)库上,则最终二进制大小如何变化?

它将与某些字节有所不同(动态链接条目的大小与该函数的机器代码的大小)