静态变量情况下的内存分配

Laz*_*zer 4 c c++ memory static memory-management

我总是对静态变量以及内存分配的方式感到困惑.

例如:

int a = 1;
const int b = 2;
static const int c = 3;

int foo(int &arg){
  arg++;
  return arg;
}
Run Code Online (Sandbox Code Playgroud)

如何分配内存a,bc

有什么区别(在内存方面),如果我打电话foo(a),foo(b)foo(c)

ken*_*ytm 7

我总是对静态变量感到困惑

在全局范围内,static仅表示链接时其他文件不可见.

如何为a,b和c分配内存?

所有这些都将存在于可执行文件(例如__DATA段)中,该文件将在执行时映射到RAM中.如果编译器是好的,b并且c将存在于只读数据区域(例如__TEXT段),甚至在优化中消除.

如果我调用foo(a),foo(b)和foo(c),有什么区别(在内存方面)?

foo(b)并且foo(c)将是编译器错误,因为const int&无法转换为int&.

否则没什么区别.通过引用传递相当于在CPU意义上通过指针传递.因此,每个内存的地址都被采用,并被foo调用.