c语言 指针 全局,c – 全局指针变量如何存储在内存中?

假设我们有一个简单的代码:

int* q = new int(13);

int main() {

return 0;

}

显然,变量q是全局的并且是初始化的.从this answer开始,我们期望q变量存储在程序文件中的初始化数据段(.data)中,但它是一个指针,因此它的值(它是堆段中的地址)是在运行时确定的.那么程序文件中存储在数据段中的值是多少?

我的尝试:

在我看来,编译器为数据段中的变量q(通常为64位地址通常为8个字节)分配一些空间,没有任何有意义的值.然后,在主函数代码之前的文本段中放入一些初始化代码,以在运行时初始化q变量.汇编中有这样的事情:

....

mov edi, 4

call operator new(unsigned long)

mov DWORD PTR [rax], 13 // rax: 64 bit address (pointer value)

// offset : q variable offset in data segment, calculated by compiler

mov QWORD PTR [ds+offset], rax // store address in data segment

....

main:

....

任何的想法?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值