嗯,我对这种类型的主题很生硬,所以很抱歉,如果我完全不符合事情。我会尽力澄清。CPU如何知道变量的大小以正确读取它?
在正在读取命令的内存中,CPU如何知道它必须读取一个4字节的字符串或一个10字节的字符串来处理该命令?或另一个命令,CPU知道它必须读取int64的大小才能正确读取数据以使用它?是存储在某个地方的大小?可能计算?
嗯,我对这种类型的主题很生硬,所以很抱歉,如果我完全不符合事情。我会尽力澄清。CPU如何知道变量的大小以正确读取它?
在正在读取命令的内存中,CPU如何知道它必须读取一个4字节的字符串或一个10字节的字符串来处理该命令?或另一个命令,CPU知道它必须读取int64的大小才能正确读取数据以使用它?是存储在某个地方的大小?可能计算?
数据大小通常是在指令中编码,或者是隐式知道的。在例如x87中:
fild word [testdata] ; loads 16 bits
fld dword [testdata] ; loads 32 bits
fld qword [testdata] ; loads 64 bits
fld tword [testdata] ; loads 80 bits
你必须告诉他“你”你的数据长度。
它是你需要分配内存的原因,例如
char test[17];
让我们来看看字符串的部分答案,这在C一个具有空字符结束一个人的字符串(即以空字节或\0
结束它),因此它的读取到空一个简单的工作字节。
对于固定类型的数据(假设为int
),编译器会通知CPU它正在处理一个int,因为编译器和CPU都将使用相同的体系结构,它们的长度将相同。
编译器生成能够正确读取变量的代码。 – 2011-12-29 15:30:25
感谢所有 - 在谷歌搜索一段时间后,这一切都变得枯燥!谢谢! – 2012-12-02 15:25:58