当您构建代码时,代码空间由链接器静态分配。在您的代码由操作系统加载的情况下,操作系统加载程序从操作系统请求该内存并将代码加载到其中。类似地,正如其名称所暗示的那样,此时分配静态数据,以及初始堆栈(尽管如果创建其他线程,可能会创建更多堆栈)。
关于确定函数的大小,链接器知道此信息,并且在大多数工具链中,链接器可以创建一个映射文件,其中包含所有静态内存对象(即那些未在运行时实例化的对象)的大小和位置。堆栈或堆上的时间)。
没有保证在运行时确定函数大小的方法(几乎没有理由这样做)但是,如果您假设链接器将源代码中相邻的函数依次定位在内存中,则以下内容可能会给出函数大小的指示:
int first_function()
{
   ...
}
void second_function( int arg )
{
    ...
}
int main( void )
{
    int first_function_length = (int)second_function - (int)first_function ;
    int second_function_length = (int)main - (int)second_function ;
}
然而YMMV; 我在 VC++ 中尝试过这个,它只在“发布”版本中给出了有效的结果;“调试”构建的结果没有任何实际意义。我建议练习只是为了兴趣,没有实际用途。
当然,另一种观察代码大小的方法是查看调试器中代码的反汇编。