在64位系统中,每个内存单元都是64位的,那么它如何保存一个包含更少空间的int变量呢?无论如何,它不会花费一个 64 位地址吗?如果是这样,如果它们要以任何方式捕获一个单元格,为什么还要费心使用不同类型的变量呢?
您对术语的使用无处不在。
存储单元通常对应于硬件级别上的逻辑门,并且假设二进制计算机很可能为 1 位大。
我想你问的是计算机中最小的可寻址单元,也称为字节,很可能有 8 位大。
这与CPU的数据寄存器宽度无关,这是人们在谈论“64位计算机”时通常所指的。数据寄存器宽度是 CPU 在单个指令中可以处理的最大数据块,但不一定是最小的。这与计算机的地址总线宽度无关,尽管现在它们通常是相同的。
当您在 C 中声明变量时,分配的大小取决于系统。int例如,在所有 32 位和 64 位计算机上,An很可能为 32 位大。值得注意的是,所有主流 64 位计算机也支持 32 位或更小的指令。因此,编译器分配比 32 位更多的内存不一定有意义 - 您可能会使用更大的内存,但速度却没有提高。
我相信您正在寻找的术语是对齐。如果较小的块分配在未对齐的地址上,则计算机读取较小的块的效率很低。即,不能被数据寄存器宽度(以字节表示)整除的地址。此类访问通常速度较慢,或者在某些情况下根本不支持。因此,64 位编译器可能会决定在 8 字节块内分配一个小变量,并保留不用作填充字节的剩余字节。然而,如果编译器针对大小进行优化,它可能会选择以更节省内存的方式存储数据,但会牺牲访问时间。