Const Variables In Local And Global Scope In Assembly
I've compiled the following C code in Compiler Exporer to see how it handles the const
keyword:
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
From what I can tell, for a variable defined outside a function (global to the file), it adds a label at the top. However, if it is a const
variable, then the variable at the top is placed in the read-only section. My question then is for the following local variable:
const int d=4;
How is its 'constant-ness' managed, as it's just a value on the stack, and can't any value on the stack be freely modified? Or, in assembly, is there no such thing as a constant local-variable, and this is just a compiler-enforced concept?
Answer
If you don't take the address, you don't need to keep a const
local in data memory anywhere. The asm equivalent is NASM d equ 4
or GAS d = 4
so you can just use it as an immediate when you do need it.
Same as a non-const
int that happens not be modified: Yes, constness for locals is purely a compile-time thing that the compiler enforces to help you catch bugs.
Related Questions
- → OctoberCMS Backend Loging Hash Error
- → "failed to open stream" error when executing "migrate:make"
- → OctoberCMS - How to make collapsible list default to active only on non-mobile
- → Create plugin that makes objects from model in back-end
- → October CMS Plugin Routes.php not registering
- → OctoberCMS Migrate Table
- → How to install console for plugin development in October CMS
- → OctoberCMS Rain User plugin not working or redirecting
- → October CMS Custom Mail Layout
- → October CMS - How to correctly route
- → October CMS create a multi select Form field
- → How to update data attribute on Ajax complete
- → October CMS - Conditionally Load a Different Page