持有空值的变量是否也占用了ram中的space?
Does variables holding the empty value also occupy the space in ram?
在任何编程语言中,如果我设置变量:
name = 'Jhon';
所以,它会在RAM中占用space的4个字节。但是如果:
name = '';
它仍然会在 RAM
中保留一个空白区域,否则会出现什么情况?
以下假设代码是在 C 中,并且变量不是简单地优化为不存在:
因为它被标记为 C,我假设 name
是 char *
类型,或者指向 char
的指针。这意味着变量 name
本身将始终占用 4 个字节(32 位系统)或 8 个字节(64 位系统),因为这通常是指针的大小。
但是,name
指向的内存量会随着您的描述而变化,但需要注意的是 - 您需要为终止字符添加一个额外的字节。该字符是一个特殊字符,向程序指示字符串已完成。
对于以上两者,char * name = "Jhon";
实际上需要 13 个字节的 space - 8 个字节用于指针,4 个字节用于每个字符,另一个字节用于终止字符。同样,char * name = "";
需要 9 个字节的 space - 8 个字节用于指针,1 个字节用于终止字符。
对于 C,如果存储不是实现程序的可观察行为所必需的,则允许编译器不预留存储。例如,如果您有一个像
这样的程序
int main( void )
{
int x;
int y;
y = some_value();
printf( "y = %d\n", y );
return 0;
}
变量 x
从未被引用,并且在 y
的计算或显示中没有任何作用(我们假设它对 some_value()
不可见)。在这种情况下,编译器可以自由地不为它预留任何 space。
类似地,在
这样的程序中
int main( void )
{
int y = 0;
printf( "y = %d\n", y );
return 0;
}
编译器可以确定这和写法完全一样
int main( void )
{
printf( "y = 0\n" );
return 0;
}
根本不用为y
留出space。
不同的语言有不同的规则;如果您好奇,请询问该特定语言。
在任何编程语言中,如果我设置变量:
name = 'Jhon';
所以,它会在RAM中占用space的4个字节。但是如果:
name = '';
它仍然会在 RAM
中保留一个空白区域,否则会出现什么情况?
以下假设代码是在 C 中,并且变量不是简单地优化为不存在:
因为它被标记为 C,我假设 name
是 char *
类型,或者指向 char
的指针。这意味着变量 name
本身将始终占用 4 个字节(32 位系统)或 8 个字节(64 位系统),因为这通常是指针的大小。
但是,name
指向的内存量会随着您的描述而变化,但需要注意的是 - 您需要为终止字符添加一个额外的字节。该字符是一个特殊字符,向程序指示字符串已完成。
对于以上两者,char * name = "Jhon";
实际上需要 13 个字节的 space - 8 个字节用于指针,4 个字节用于每个字符,另一个字节用于终止字符。同样,char * name = "";
需要 9 个字节的 space - 8 个字节用于指针,1 个字节用于终止字符。
对于 C,如果存储不是实现程序的可观察行为所必需的,则允许编译器不预留存储。例如,如果您有一个像
这样的程序int main( void )
{
int x;
int y;
y = some_value();
printf( "y = %d\n", y );
return 0;
}
变量 x
从未被引用,并且在 y
的计算或显示中没有任何作用(我们假设它对 some_value()
不可见)。在这种情况下,编译器可以自由地不为它预留任何 space。
类似地,在
这样的程序中int main( void )
{
int y = 0;
printf( "y = %d\n", y );
return 0;
}
编译器可以确定这和写法完全一样
int main( void )
{
printf( "y = 0\n" );
return 0;
}
根本不用为y
留出space。
不同的语言有不同的规则;如果您好奇,请询问该特定语言。