我不是在询问堆栈/堆/静态是什么意思,或者它们之间有什么不同。我问的是const对象在哪个区域?
C ++代码:
#include <cstdio>
using namespace std;
const int a = 99;
void f()
{
const int b = 100;
printf("const in f(): %d\n", b);
}
int main()
{
const int c = 101;
printf("global const: %d\n", a);
f();
printf("local const: %d\n", c);
return 0;
}
哪个内存区域为a
,b
和c
?它们的寿命是多少?
C语言有什么不同吗?
如果我带他们的地址怎么办?
答案 0 :(得分:7)
没有说明。在编译您显示的代码时,一个好的优化编译器可能不会为它们分配任何存储。
实际上,这正是我的编译器(g++ 4.7.2
)所做的,将代码编译为:
; f()
__Z1fv:
LFB1:
leaq LC0(%rip), %rdi
movl $100, %esi
xorl %eax, %eax
jmp _printf
LFE1:
.cstring
LC1:
.ascii "global const: %d\12\0"
LC2:
.ascii "local const: %d\12\0"
; main()
_main:
LFB2:
subq $8, %rsp
LCFI0:
movl $99, %esi
xorl %eax, %eax
leaq LC1(%rip), %rdi
call _printf
call __Z1fv
movl $101, %esi
xorl %eax, %eax
leaq LC2(%rip), %rdi
call _printf
xorl %eax, %eax
addq $8, %rsp
LCFI1:
ret
如您所见,常量的值直接嵌入到机器代码中。堆栈,堆或为其中任何一个分配的数据段都没有内存。