静态变量、全局变量在ELF文件中的位置

本文深入探讨了在GCC编译环境下,静态变量和全局变量在ELF执行文件中的存储位置,结合汇编知识和编译器优化,解析它们如何影响程序内存布局。同时,提到了struct和table的组织方式对编译结果的影响。
摘要由CSDN通过智能技术生成

   静态变量编译之后,被编译器放到了可执行文件的哪个字段? 以下实验在ubuntu10.04上完成,使用gcc4.4.3。

测试源码如下:

#include <stdio.h>

int g_val_init = 45;
int g_val_uninit;
static int s_global_inited = 12;
static int s_global_uninited;

struct ct_type{
	char st_s_val;
	char st_val;
};

int 
foo()
{
	static int s_foo_init = 67;
	static int s_foo_uninited;

	printf("hello..\n");
	return 0;
}

int main()
{
	static int s_local_inited = 23;
	static int s_local_uninited;
	static struct ct_type s_ct = {.st_s_val=133, .st_val=132 };
	struct ct_type local_ct;
	int tmp = 100;

	printf("%d..\n", tmp);	
	return 0;
}


使用gcc -S static_val.c 编译:

           

作为初始化之后的全局变量g_val_init, 汇编中记录了其全局属性,对齐方式,类型,变量长度(4字节)。

而未初始化的全局变量g_val_uninit,仅仅在.comm中记录了一部分信息,并没有标记globl信息。

作为初始化了的全局静态变量s_global_inited, 没有特别的处理。

未初始化的全局静态变量s_global_uninited,被标记了.local, 并添加了.comm信息。

  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值