我想这并不是严格意义上的“编程”问题,但我已经思考了一段时间。当你创建一个变量并赋值时,计算机会为该变量分配一定数量的字节,并存储该值,但当它在以后使用该变量时,它如何知道该内存地址中存储的数据类型呢?
typeof
的东西,因此通常会有一个“对象头”存储一些元数据,包括类型(以及其他信息,例如引用计数)。但是你仍然无法在随机的内存块中识别对象的开头(毕竟它们都是 1 和 0),因此你需要始终指向它的指针...x
是一个 int
,它就知道需要加载多少字节到寄存器中,并使用哪些操作码进行加法运算。即使添加虚函数,你仅需要编译一个函数指针表(不需要进一步的元数据 - obj->foo()
转换为“获取 vtable 的第 n 个条目并调用它”,而不是“调用此地址处的代码”)。计算机并不关心数据类型。有些语言可能会给他们的数据打上类型标签(特别是动态语言,在这些语言中,任何变量都可以保存任何数据类型); 在其他语言(如C)中,您需要声明变量,并且编译器知道每当使用与该变量关联的地址空间时将该值视为特定类型。但计算机本身并不在乎这些,它只看到每个字节8个位。