Bha*_*rya 2 c c++ linux ubuntu operating-system
我使用64位ubuntu机器(x86_64).
我的大四已经告诉过,在C程序中,任何指针的大小总是等于int的大小.这是对的吗 ?
但是当我执行时,sizeof(int)
我得到4个字节,因为sizeof(int*)
我得到8 个字节.
1.为什么sizeof(int)
我的x86_64中有4个字节?
And*_*nle 10
我的大四已经告诉过,在C程序中,任何指针的大小总是等于int的大小.这是对的吗?
不,那是不对的.
存在多种不同的存储器模型,通常在同一系统上同时存在.系统通常支持同时运行ILP32和LP64进程.虽然int
ILP32和LP64中的4个字节(32位),但LP64中的指针是8个字节(64位).
不,这不对.
你的"老人"错了.你的编译器是正确的(显然).
的尺寸int
和一个指针的大小跨平台而变化,它们并不一定是相同的.实际上,在现代64位消费类硬件上,您可能会找到32位int
和64位指针.
没有要求指针总是与a相同int
.实际上,指向不同类型的指针不必具有彼此相同的大小:
6.2.5类型
...
28指针void
应具有与指向字符类型的指针相同的表示和对齐要求.48)类似地,指向兼容类型的合格或非限定版本的指针应具有相同的表示和对齐要求.所有指向结构类型的指针都应具有相同的表示和对齐要求.所有指向union类型的指针都应具有相同的表示和对齐要求.指向其他类型的指针不需要具有相同的表示或对齐要求.
48)相同的表示和对齐要求意味着可互换性作为函数的参数,函数的返回值和联合的成员.
对于C++,请参阅在线C++标准,第3.9.2节,第3段.
在32位机器上,它通常用于指针类型并且int
大小相同,但它并不普遍(特别是当我们转向64位体系结构时).
归档时间: |
|
查看次数: |
755 次 |
最近记录: |