我知道一个字节是CPU内存的最小可寻址代码单元,因此x86-32机器中的字节大小为8位,但c ++标准规定sizeof(char)==1 bytes>=8 bits
,所以我可以有一个编译器x86-32机器有sizeof(char)==16 bits
,表示该字节是16位。
所以在这个例子中,字节是关于CPU的8位,从编译器的角度来看它是16位。所以字节的定义是什么,是什么决定它的大小?
答案 0 :(得分:6)
编译器决定这一点。但是,在C和C ++的情况下,出于性能原因,编译器通常遵循CPU。
在最小可寻址单元为16位宽的平台上,编译器可以实现8位char
,但它必须(1)发出指令以获得8位16位"字节" (2)每char*
或void*
需要一个额外的位来表示下半部分/上半部分。
反之亦然,您可以在x86上使用16位char
实现编译器,但这意味着所有C字符串的内存都会比通常多两倍,并且很难与外面的世界,它说8位char
。