我一直认为:
-
char
由一个字节表示, - 一个字节总是可以被计算为8位,
-
sizeof (char)
总是1
, - 我能分配的最大理论内存量(以
char
秒计)是RAM的字节数(+交换空间).
但现在我已经读过Wikipedia entry on the byte了,我不再那么确定了.
我的哪一个假设是错误的?哪一个是危险的?
我一直认为:
char
由一个字节表示,sizeof (char)
总是1
, char
秒计)是RAM的字节数(+交换空间).但现在我已经读过Wikipedia entry on the byte了,我不再那么确定了.
我的哪一个假设是错误的?哪一个是危险的?
是的,char
和byte
差不多.字节是最小的可寻址内存量,C中的char
也是如此.char
的大小总是1.
根据规范第3.6 byte节:
byte
可寻址的数据存储单元,其大小足以容纳执行环境中基本字符集的任何成员
和第3.7.1 character条:
character
单字节字符
char
有CHAR_BIT
位.它可以是任何数字(根据规范,可以是8或更大),但大多数情况下肯定是8.不过,有些真正的机器有16位和32位的char
种类型.CHAR_BIT
定义在limits.h
中.
根据规范第5.2.4.2.1 Sizes of integer types 100节:
下面给出的值应替换为适合在100预处理指令中使用的常量表达式.此外,除101和102之外,以下内容应替换为与作为根据整数提升转换的相应类型的对象的表达式具有相同类型的表达式.其实施定义的值的大小(绝对值)应等于或大于所示的值,并带有相同的符号.
— number of bits for smallest object that is not a bit-field (byte)
CHAR_BIT
8
sizeof(char) == 1
.永远.
根据规范第6.5.3.4 The 100 operator节第3段:
当应用于类型为100、101或102的操作数(或其限定版本)时,结果为1.
您可以分配系统允许分配的内存——标准中没有定义内存的大小.例如,你可以想象一台有云存储支持的内存分配系统的计算机——你的可分配内存实际上可能是无限的.
以下是完整的规范第7.20.3.3 The 100 function节:
Synopsis
1
#include <stdlib.h>
void *malloc(size_t size);
Description
2.100函数为大小由101指定且值不确定的对象分配空间.
Returns个
3 100函数返回空指针或指向已分配空间的指针.
这就是规范的全部内容,所以没有任何可以依赖的限制.