在回答我的另一个答案的评论时here,我找到了我所想的may是 C 标准中的一个漏洞(c1x,我没有检查过早期的标准,是的,我知道在这个星球上的所有居民中,只有我一个人发现了标准中的错误,这是难以置信的)。信息如下:
- 第 6.5.3.4 节(“sizeof 运算符”)第 2 段指出
"The sizeof operator yields the size (in bytes) of its operand"
.
- 该节第 3 段规定:
"When applied to an operand that has type char, unsigned char, or signed char, (or a qualified version thereof) the result is 1"
.
- 第 7.20.3.3 节描述
void *malloc(size_t sz)
但它说的是"The malloc function allocates space for an object whose size is specified by size and whose value is indeterminate"
。它根本没有提及参数使用什么单位。
- 附件E开始的8是minimum价值
CHAR_BIT
所以字符的长度可以超过一个字节。
我的问题很简单:
在 char 为 16 位宽的环境中,将malloc(10 * sizeof(char))
分配 10 个字符(20 个字节)还是 10 个字节?上面的第1点似乎表示前者,第2点表示后者。
有比我更了解 C-standard-fu 的人对此有答案吗?
在 16 位char
环境malloc(10 * sizeof(char))
将分配10char
s(10 字节),因为如果char
是 16 位,那么该架构/实现将一个字节定义为 16 位。 Achar
不是八位位组,而是一个字节。在较旧的计算机上,该值可能大于 8 位de-facto我们今天的标准。
C 标准的相关部分如下:
3.6 术语、定义和符号
字节 - 数据存储的可寻址单元,足够大,可以容纳执行环境基本字符集的任何成员...
注 2 – 字节由连续的位序列组成,其数量由实现定义。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)