5

我不是在问堆栈/堆/静态是什么意思,或者它们之间有什么不同。我在问 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, 和in是哪个内存区域c?他们的寿命是多少?C语言有什么不同吗?

如果我拿他们的地址怎么办?

4

1 回答 1

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

如您所见,常量的值直接嵌入到机器代码中。堆栈、堆或数据段上没有为它们分配的任何内存。

于 2013-04-07T06:36:36.327 回答