【发布时间】:2020-08-29 05:28:28
【问题描述】:
我在Compiler Exporer 中编译了以下C 代码,看看它如何处理const 关键字:
int a=1;
const b=2;
int func () {
int c=3;
const int d=4;
}
.section .data
a:
.long 1
.section .rodata
b:
.long 2
func:
pushq %rbp
movq %rsp, %rbp
movl $3, -4(%rbp)
movl $4, -8(%rbp)
nop # also, why does it add a nop here?
popq %rbp
ret
据我所知,对于在函数外部定义的变量(文件的全局变量),它会在顶部添加一个标签。但是,如果它是const 变量,那么顶部的变量将被放置在只读部分中。然后我的问题是针对以下局部变量:
const int d=4;
它的“常数”是如何管理的,因为它只是堆栈上的一个值,不能随意修改堆栈上的任何值吗?或者,在汇编中,不存在常量局部变量之类的东西,而这只是编译器强制执行的概念?
【问题讨论】: