汇编中局部和全局范围内的const变量

大卫542

我已经在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;

它的“恒定性”如何管理,因为它只是堆栈中的一个值,并且堆栈中的任何值都不能自由修改吗?或者,在汇编中,没有诸如常量局部变量之类的东西,而这仅仅是编译器强制的概念?

彼得·科德斯

如果您不使用地址,则无需const在任何地方在数据存储器中保留本地地址asm的等效项是NASMd equ 4或GAS,d = 4因此您可以在需要时立即将其用作立即。

const不会发生变化的非int相同:是的,局部性的constness纯粹是编译器执行的可帮助您捕获错误的编译时事物。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在局部范围内访问全局变量?

来自分类Dev

封闭的局部范围内的变量与全局范围内的变量-Python

来自分类Dev

C中局部变量的范围和生存期

来自分类Dev

C中局部变量的范围和生存期

来自分类Dev

局部函数变量更改不会影响全局范围内的变量。为什么不?

来自分类Dev

python使用全局变量中的变量而未在局部范围内将其定义为全局变量

来自分类Dev

在局部范围内定义全局范围的变量

来自分类Dev

枚举常量中局部变量的范围

来自分类Dev

C ++中局部于静态方法的变量的范围

来自分类Dev

枚举常量中局部变量的范围

来自分类Dev

Python中局部变量的范围

来自分类Dev

退出函数后在全局范围内使用局部变量

来自分类Dev

使用局部最小值和全局最大值查找范围内的所有数字

来自分类Dev

局部范围内可以有多少个变量

来自分类Dev

C#-在“封闭”局部范围内使用变量?

来自分类Dev

局部范围内可以有多少个变量

来自分类Dev

如何查找在局部范围内声明的变量的地址?

来自分类Dev

增强的for循环中局部变量的范围

来自分类Dev

增强的for循环中局部变量的范围

来自分类Dev

C ++中局部变量和时间变量之间的差异

来自分类Dev

括号和范围内的 Python 变量

来自分类Dev

类定义应该放在全局范围还是局部范围内?

来自分类Dev

Gradle全局变量不在buildscript范围内

来自分类Dev

在静态范围内访问全局变量

来自分类Dev

如何访问__main__范围内的全局变量?

来自分类Dev

宏观范围内的CMake全局变量

来自分类Dev

如何访问__main__范围内的全局变量?

来自分类Dev

为什么if语句不在全局范围内寻找变量

来自分类Dev

Node.js在全局范围内访问嵌套变量

Related 相关文章

热门标签

归档