ims*_*rch 5 c++ memory-management const
我不是在问什么堆栈/堆/静态意味着什么或它们之间有什么不同.我问的是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;
}
Run Code Online (Sandbox Code Playgroud)
该存储区域是a,b和c在?它们的寿命是多少?C语言有什么不同吗?
如果我带他们的地址怎么办?
那没有具体说明.在编译您显示的代码时,一个好的优化编译器可能不会为它们分配任何存储空间.
实际上,这正是我的编译器(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
Run Code Online (Sandbox Code Playgroud)
如您所见,常量的值直接嵌入到机器代码中.堆栈,堆或为其中任何一个分配的数据段都没有内存.