C标准允许指向不同类型的指针具有不同的大小,例如,允许使用sizeof(char*) != sizeof(int*)
.然而,它确实要求,如果指针被转换为void*
,然后又被转换回其原始类型,那么它必须与其原始值进行比较.因此,从逻辑上讲,sizeof(void*) >= sizeof(T*)
代表所有类型T
,对吗?
在目前使用的大多数常见平台(x86、PPC、ARM和64位变体等)上,所有指针的大小都等于本机寄存器大小(4或8字节),而不管指向的类型是什么.是否有任何深奥或嵌入式平台,指向不同类型的指针可能有不同的大小?我特别询问了大约data个指针,不过我也很想知道是否有平台上function个指针的大小不寻常.
我肯定not%地询问C++的成员指针和成员指针函数,它们在公共平台上具有不寻常的大小,甚至在一个平台内可能会有所不同,这取决于指针类的属性(非多态、单继承、多重继承、虚拟继承或不完整类型).