c语言中的变量存放在哪里,你的变量究竟存储在哪里?

c语言变量存储问题

在函数体中定义的变量通常是在栈上,用malloc, calloc, realloc等分配内存的函数分配得到的就是在堆上。

在函数外部定义的变量(全局变量或静态外部变量)和在函数内部定义的static变量,其生存期就是程序运行的全过程,这些变量被存储在数据段(datasegment)中。

在函数内部定义的auto变量(没有用关键字static定义的变量)的生存期从程序开始执行其所在的程序块代码时开始,到程序离开该程序块时为止。作为函数参数的变量只在调用该函数期间存在。这些变量被存储在栈(stack)中。

你的变量究竟存储在什么地方?

作者:杨小华

我相信大家都有过这样的经历,在面试过程中,考官通常会给你一道题目,然后问你某个变量存储在什么地方,在内存中是如何存储的等等一系列问题。不仅仅是在面试中,学校里面的考试也会碰到同样的问题。

如果你还不知道答案,请接着往下看。接下来,我们将在Linux操作系统上,以GCC编译器为例来讲解变量的存储。

在计算机系统中,目标文件通常有三种形式:

1.可重定位的目标文件:包含二进制代码和数据,与其他可重定位目标文件合并起来,创建一个可执行目标文件。

2.可执行的目标文件:包含二进制代码和数据,其形式可以被直接拷贝到存储器中并执行

3.共享目标文件:一种特殊的可重定位目标文件,即我们通常所说的动(静)态链接库

一个典型的可重定位目标文件如下图所示:

高地址

节头部表

.strtab

.line

.debug

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值