有人能解释一下有什么不同Word
和Byte
可寻址的吗?它与内存大小等有什么关系?
在"低级编程:英特尔®64架构上的C,汇编和程序执行"一书中,我读到:
每个虚拟64位地址(例如,我们在程序中使用的地址)由几个字段组成.地址本身实际上只有48位宽; 它被符号扩展为64位规范地址.它的特点是它的17个左位是相等的.如果不满足条件,则在使用时立即拒绝该地址.然后借助特殊表将48位虚拟地址转换为52位物理地址.
为什么虚拟地址和物理地址之间的差异为4位?
assembly memory-management virtual-memory memory-address mmu
我想知道是否允许 C++ 实现以不同方式表示指向不同类型的指针。例如,如果我们有 4 字节大小/对齐int
和 8 字节大小/对齐long
,是否可以将指向int
/ 的指针表示long
为对象地址分别右移 2/3 位?这将有效地禁止将指向指针转换为指向long
指针int
。
我问是因为[expr.reinterpret.cast/7]:
对象指针可以显式转换为不同类型的对象指针。当
v
对象指针类型的纯右值转换为对象指针类型“指向cv 的 指针T
”时,结果为static_cast<cv T*>(static_cast<cv void*>(v))
。[注7:将指向
T1
对象类型的“指向”类型的指针转换为“指向”T1
类型的指针T2
(其中T2
是对象类型,对齐要求T2
不比 更严格T1
)并返回到其原始类型type 产生原始指针值。—尾注]
第一句暗示我们可以将指针转换为任意两种对象类型。但是,(非规范性)注释 7 中的移情文本表示对齐在这里也起到了一定的作用。(这就是为什么我想出了这个int
-long
上面的例子。)