局部变量 确定地址时间

BBAPI 2011-10-28 11:03:44

int function()
{
static int a = 0;
const int b = 1;
return 0;
}

如上一函数中,局部变量a存储在内存全局区,b存储在常量区,是吗?那么a,b他们确定地址是在编译时还是在运行时?
...全文
113 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
BBAPI 2011-10-28
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 mingliang1212 的回复:]

引用 4 楼 bbapi 的回复:
引用 1 楼 mingliang1212 的回复:
a存储在内存静态区,
b不是存储在常量区,b虽然是const,但是也是保存在栈上。

a的地址在运行开始时确定,b的地址在调用该函数时确定。

“从地址看,变量可以分成有确定地址的变量和没有确定地址的变量。所谓“有确定地址”就是指在程序运行前就有确定的地址。而“没有确定地址”的变量,它们的地址是……
[/Quote]
那静态局部变量可否在编译时相对确定地址?
iamnobody 2011-10-28
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 bbapi 的回复:]
引用 1 楼 mingliang1212 的回复:
a存储在内存静态区,
b不是存储在常量区,b虽然是const,但是也是保存在栈上。

a的地址在运行开始时确定,b的地址在调用该函数时确定。

“从地址看,变量可以分成有确定地址的变量和没有确定地址的变量。所谓“有确定地址”就是指在程序运行前就有确定的地址。而“没有确定地址”的变量,它们的地址是在运行时确定的。

全局变量和静态变……
[/Quote]

从操作系统上来说,程序所用的内存是操作系统分配的一个地址空间,只有在程序启动时才能确定他的地址值。
“有确定的地址”的意思是相对而言的。是相当于分配给这个进程的地址的首地址而言的。但是首地址在运行时才确定下来,所以全局变量的地址在编译后只是相对地确定了。

BBAPI 2011-10-28
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 mingliang1212 的回复:]
a存储在内存静态区,
b不是存储在常量区,b虽然是const,但是也是保存在栈上。

a的地址在运行开始时确定,b的地址在调用该函数时确定。
[/Quote]
“从地址看,变量可以分成有确定地址的变量和没有确定地址的变量。所谓“有确定地址”就是指在程序运行前就有确定的地址。而“没有确定地址”的变量,它们的地址是在运行时确定的。

全局变量和静态变量都有确定地址。局部变量和动态分配的变量没有确定地址。”

根据你的回复,那这里的“静态变量”应该是全局的静态变量了,可为何他还说“全局变量和静态变量都有确定地址。”?
BBAPI 2011-10-28
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 mingliang1212 的回复:]

a存储在内存静态区,
b不是存储在常量区,b虽然是const,但是也是保存在栈上。

a的地址在运行开始时确定,b的地址在调用该函数时确定。
[/Quote]
这样,一直以来以为a是在编译时确定地址。。。
追求执着 2011-10-28
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 mingliang1212 的回复:]
a存储在内存静态区,
b不是存储在常量区,b虽然是const,但是也是保存在栈上。

a的地址在运行开始时确定,b的地址在调用该函数时确定。
[/Quote]
++
iamnobody 2011-10-28
  • 打赏
  • 举报
回复
a存储在内存静态区,
b不是存储在常量区,b虽然是const,但是也是保存在栈上。

a的地址在运行开始时确定,b的地址在调用该函数时确定。

64,643

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧