包含空值的变量是否还会占用ram中的空间?

时间:2018-12-11 21:30:57

标签: c variables byte bit ram

在任何编程语言中,如果我设置了变量:

name = 'Jhon';

因此,它将在RAM中占据4个字节的空间。但是,如果:

name = '';

它仍将在RAM中保留空白区域,或者会出现什么情况?

2 个答案:

答案 0 :(得分:2)

对于C语言,如果实现程序的可观察到的行为不需要该存储,则允许编译器不保留该存储。例如,如果您有一个类似

的程序
int main( void )
{
  int x;
  int y;

  y = some_value();
  printf( "y = %d\n", y );
  return 0;
}

变量x从未被引用,并且在y的计算或显示中不起作用(我们假设它对some_value()不可见)。在这种情况下,编译器可以自由地为其保留任何空间。

类似地,在类似程序中

int main( void )
{
  int y = 0;
  printf( "y = %d\n", y );
  return 0;
}

编译器可以确定这与编写完全相同

int main( void )
{
  printf( "y = 0\n" );
  return 0;
}

,根本不用为y预留空间。

不同的语言有不同的规则;如果您好奇,请询问该特定语言。

答案 1 :(得分:1)

以下假设代码使用C语言编写,并且该变量并非简单地优化为不存在:

由于它被标记为C,因此我假设name的类型为char *或指向char的指针。这意味着变量name本身将始终占用4个(32位系统)或8个字节(64位系统),因为这通常是指针的大小。

然而,name所指向的内存量将随着您对一个警告的描述而变化-您需要为终止字符添加一个额外的字节。此字符是一个特殊字符,向程序指示字符串已完成。

对于以上两种情况,char * name = "Jhon";实际上需要13个字节的空间-指针8个字节,每个字符4个字节,终止字符另一个字节。同样,char * name = "";需要9个字节的空间-指针需要8个字节,结束字符需要1个字节。