从上一个问题实践C测试从GeekInterview,为什么大小ptr12,而ptr2和ptr3是4的大小?
main()
{
char near * near *ptr1;
char near * far *ptr2;
char near * huge *ptr3;
printf("%d %d %d",sizeof(ptr1),sizeof(ptr2),sizeof(ptr3));
}
Run Code Online (Sandbox Code Playgroud)
输出:2 4 4
在处理具有分段存储器的架构(如x86实模式)时,可以区分三种类型的指针地址(段中x86的示例:偏移表示法):
近
仅存储偏移部分(16位) - 当解析这样的指针时,当前数据段偏移将用作段地址.
远
存储段和偏移地址(每个16位),从而在存储器中定义绝对物理地址.
巨大
与指针相同,但可以标准化,0000:FFFF + 1即将适当地缠绕到下一个段地址.
在现代操作系统上,这并不重要,因为内存模型通常是扁平的,使用虚拟内存而不是直接寻址物理内存(至少在环3应用程序中).