这个问题可能之前已经得到了解答,但我已经搜索了这些论坛和谷歌,但我认为我没有以最简洁的方式询问正确的事情所以我道歉但我会尝试进一步解释我的问题:
比方说,你有一个变量,让我们调用它x
,它指的是一个保存二进制值的内存01000001
.我想知道:这个二进制表示的类型信息在哪里举行?
是否有类似于字典的内存映射系统将二进制表示映射到某些预定义的类型列表,例如0000
表示int
和0001
表示a char
,例如?
我觉得情况并非如此,因为这会引入庞大的开销,例如,引入更多用户定义的类型或创建更多变量.但我想这可能就是weakly
这种语言的情况.(或者可能不是)但是strongly
那种语言呢?
我想知道:这个二进制表示的类型信息在哪里举行?
没有必要存储它.静态类型程序编译为针对某些存储器位置的指令序列.静态类型检查验证指令是否在保存适当数据的存储器位置上运行.但是,在运行时,可以在不进行任何验证的情况下执行指令.
考虑这个简单的C函数:
void increment(int* x) { (*x) += 1; }
在编译时,编译器将验证指针后面的值是否包含type值int
.但是,指针本身只是一个数字,因此无论如何都可以进行增量操作.
因此,这个程序是很好的类型,但你失去了上述保证.
void increment(void* x) { (*(int*)(x)) += 1; }
这里的关键观察是低级指令以相同的方式对各种数据进行操作.