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