Pan*_*Pan -1 c c++ cpu-word computer-architecture
我看过这个链接计算机中的字大小是什么意思?.它定义了字大小.我试图用比特表示非常长的字符串,其中每个字符由4位表示并保存在长整数或整数数组中,以便我可以在需要时提取我的字符串.我可以将这些位保存为整数数组或长数组.
- 如果我使用长数组(8字节),我将能够在一个长数组中保存8*4 = 32位.
- 但是如果我使用int,我将只能保存4*4 = 16位.
现在,如果我的Word大小= 32,那么我应该只使用int而不是长.
Mat*_*son 10
要回答你直接的问题:有处理器的天然字大小和C和C++类型之间没有保证关系int或long.是的,通常int与处理器中寄存器的大小相同,但大多数64位处理器不遵循此规则,因为它会使数据不必要地变大.另一方面,8位处理器的寄存器大小为8位,但int根据C和C++标准,需要至少16位大小,因此编译器必须使用多个寄存器来表示一个整数[以某种方式].
一般来说,如果你想知道有多少位或字节某种类型的是,最好不要依赖int,long,size_t或者void *,因为它们都可能对不同的处理器架构或在相同的架构,甚至不同的编译器不同.一个int或long可以是相同尺寸或不同尺寸.只有标准规定的规则long是至少32位.
因此,要控制位数,请使用#include <cstdint>(或在C中stdint.h),并使用类型uint16_t或uint32_t- 然后您知道它将保持给定的位数.
在具有36位"单词大小"的处理器上,uint32_t例如,类型将不存在,因为没有类型可以精确地保存32位[最有可能].或者,编译器可以添加额外的指令"表现得好像它是32位类型"(换句话说,如果需要,可以扩展符号,并根据需要屏蔽顶部位)