c-堆栈中每个存储单元的大小,是否可以拆分一个单元



在64位系统中,每个内存单元都是64位的,那么它如何保存包含较少空间的int变量呢?它不会花掉一个64位地址吗?如果是这样的话,如果它们要以任何方式捕获一个单元格,为什么要使用不同类型的变量呢。

您对术语的使用无处不在。

存储单元通常对应于硬件级别上的逻辑门,并且假设二进制计算机,它很可能是1比特大。

我想你问的是计算机中最小的可寻址单元,也被称为字节,很可能有8位大。

这与CPU的数据寄存器宽度无关,这是人们在谈论"寄存器宽度"时通常所指的;64位计算机";。数据寄存器宽度是CPU在单个指令中可以处理的最大数据块,但不一定是最小的。这与计算机的地址总线宽度无关,尽管它们现在通常是相同的。

在C中声明变量时,分配的大小取决于系统。例如,在所有32位和64位计算机上,int很可能是32位大的。值得注意的是,所有主流的64位计算机也支持32位或更小的指令。因此,编译器分配超过32位的内存并不一定有意义——你可能会在没有速度的情况下获得更大的内存使用量。

我相信你想要的术语是对齐。如果较小的块被分配在未对齐的地址上,则计算机读取较小的块是低效的。也就是说,不能被数据寄存器宽度(以字节表示(整除的地址。这种访问通常较慢,或者在某些情况下根本不受支持。因此,64位编译器可能会决定在8字节的块中分配一个小变量,并保留未用作填充字节的剩余字节。然而,如果编译器针对大小进行优化,它可能会选择以更有效的内存方式存储数据,但代价是访问时间。

最新更新