为以下类型的声明分配的内存大小是否有任何区别:

Nis*_*wal 4 c

一世) static int a, b, c;

II) int a; int b; int c;

我不确定如何为这些类型的声明分配内存.如果这些声明不同,那么为每个声明分配多少内存?

Bar*_*chs 6

static int a,b,c;
Run Code Online (Sandbox Code Playgroud)

将在程序的DATA部分分配三个整数(可能每个32位,或4个字节).只要您的程序运行,它们将始终存在.

int a; int b; int c;
Run Code Online (Sandbox Code Playgroud)

将在STACK上分配三个整数.当它们超出范围时它们将消失.

  • 一个警告 - 第二种情况假设它们在函数内声明.如果它们是全局声明的,我认为它们也会进入DATA部分. (6认同)
  • 严格来说,很少有操作系统会把它们放在数据部分.他们很可能会进入bss.如果它们在一个函数中,那么如果有足够的寄存器,那么非静态函数可能根本就不会为它们分配任何内存. (3认同)
  • @Claudio Daffra是一个全局变量,即使没有指定符'static'也会在程序启动时初始化.C11 6.2.4.3. (2认同)