我一直认为:
char由一个字节表示,sizeof (char)总是1,chars 计)是RAM的字节数(+交换空间).但是现在我已经阅读了维基百科条目,我不再那么肯定了.
我的假设中有哪一个是错的?哪一个是危险的?
Car*_*rum 43
是的,char而且byte是几乎一样的.一个字节是最小的可寻址内存量,因此char在C.中,a char始终具有大小为1.
从规范,第3.6节字节:
字节
可寻址的数据存储单元,其大小足以容纳执行环境的基本字符集的任何成员
和3.7.1部分字符:
字符
适合字节的单字节字符<C>位表示
A char有CHAR_BIT位.它可以是任何数字(根据规范,8或更高),但绝对是最常见的8.但是有真正的机器有16位和32位char类型. CHAR_BIT定义于limits.h.
从规范,第5.2.4.2.1<limits.h>节整数类型的大小:
下面给出的值应替换为适用于
#if预处理指令的常量表达式.此外,除了CHAR_BIT和之外MB_LEN_MAX,以下内容应由与表达式相同的表达式替换,该表达式是根据整数提升转换的相应类型的对象.它们的实现定义值的大小(绝对值)应等于或大于显示的值,并带有相同的符号.- 不是位字段(字节)的最小对象的位数
CHAR_BIT8
sizeof(char) == 1.总是.
根据规范,第6.5.3.4sizeof节,运营人,第3段:
当应用于具有类型的操作数
char,unsigned char或signed char,(或合格的版本物)的结果是1.
您可以分配尽可能多的内存,系统将允许您分配 - 标准中没有任何内容可以定义可能的内容.例如,您可以想象一台具有云存储支持的内存分配系统的计算机 - 您的可分配内存可能实际上是无限的.
这是完整的规格部分7.20.3.3 malloc功能:
概要
1
#include <stdlib.h>
void *malloc(size_t size);描述
2该
malloc函数为大小由其指定size且其值不确定的对象分配空间.返回
3该
malloc函数返回空指针或指向已分配空间的指针.
这就是规范的全部内容,因此您无法依赖任何限制.
sizeof(char)被定义为永远1.来自C99:
当应用于具有char,unsigned char或signed char(或其限定版本)类型的操作数时,结果为1.
但是,它不能保证为8位.在实践中,在绝大多数平台上,它将是,但不是,你不能在技术上指望始终如此(也不应该重要,因为你应该使用sizeof无论如何).
具体来说,某些架构,特别是在 DSP 领域,其字符长度大于 8 位。在实践中,他们牺牲内存空间来换取速度。
| 归档时间: |
|
| 查看次数: |
14603 次 |
| 最近记录: |