在任何编程语言中,如果我设置了变量:
name = 'Jhon';
因此,它将在RAM中占据4个字节的空间。但是,如果:
name = '';
它仍将在RAM
中保留空白区域,或者会出现什么情况?
答案 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个字节。