内存中的const
函数参数存储在C?
通常参数存储在堆栈中,但如果参数声明为const
,那么它存储在哪里?
答案 0 :(得分:1)
与任何其他参数相同(取决于实现)。 const限定符仅表示函数不会修改其参数。这并不意味着参数是可以消除的编译时常量表达式。
此外,编译器不限于在调用堆栈上传递参数/参数(如果实现存在这样的事情)。如果编译器认为它们更好,它们也可以在寄存器中传递。
答案 1 :(得分:0)
const
关键字表示使用此关键字的数据无法修改内容。
例如,如果函数的参数为const:
void my_func(const char c) {
//Do things
//This is prohibited and will cause error:
c = 3;
}
//Function call
char a = 'a'; //This is stored on RAM somewhere (if inside function, then it is on stack)
my_func(a); //Call function, value of a is pushed to stack.
此功能无法更改内部c
的值。
如果你有const参数的全局变量,那么一些编译器会把它放到FLASH内存(非易失性)内存中。这主要发生在嵌入式系统上,但不确定是否真的会发生。
//This is stored either on RAM or on non-volatile memory (FLASH)
const char str[] = "My string which cannot be modified later";
int main(void) {
//...your code
//This is prohibited:
str[2] = 3; //Error!
}
此str
是常量,无法修改。现在,现代编译器(ARM编译器)将把它放到AVR上的闪存中,现在可能会发生这种情况。在那里,您必须为AVR添加PROGMEM
GCC关键字。