为了账号安全,请及时绑定邮箱和手机立即绑定

“ char”总是总是有8位吗?

“ char”总是总是有8位吗?

C
牛魔王的故事 2019-12-26 10:53:13
我一直认为:一个char由一个字节表示,一个字节总是可以指望有8位,这sizeof (char)始终是1,我可以分配的最大理论内存量(以chars为单位)是RAM的字节数(+交换空间)。但是,既然我已经阅读了有关字节的Wikipedia条目,现在就不能确定了。我的假设中哪一个是错误的?哪个危险?
查看完整描述

3 回答

?
子衿沉夜

TA贡献1828条经验 获得超3个赞

  1. 是的,char而且byte是几乎一样的。字节是最小的可寻址内存量,charC中的a也是如此。 char始终具有大小1。

    根据规范,第3.6节:

    字节

    数据存储的可寻址单元,其大小足以容纳执行环境的基本字符集的任何成员

    3.7.1字符

    字符

    单字节字符
    <C>位表示形式,适合一个字节

  2. charCHAR_BIT位。它可以是任何数字(根据规范,可以是8或更大),但是肯定是最常见的8。但是,有一些真正的机器具有16位和32位char类型。 CHAR_BIT在中定义limits.h

    根据规范,第5.2.4.2.1<limits.h>的整数类型的大小

    以下给出的值应由适合在#if预处理指令中使用的常量表达式代替。此外,除了CHAR_BIT和之外MB_LEN_MAX,以下内容应替换为与根据整数提升转换为相应类型的对象的表达式具有相同类型的表达式。其实现定义的值的大小(绝对值)应等于或大于所示的相同符号。

    —不是位字段的最小对象的位数(字节)
        CHAR_BIT                               8

  3. sizeof(char) == 1。总是。

    根据规范第6.5.3.4sizeof操作员第3段:

    应用于类型为charunsigned char或的操作数signed char(或其限定版本)时,结果为1。

  4. 您可以分配的内存与系统允许分配的内存一样多-标准中没有定义内存的多少。您可以想象,例如,一台具有云存储支持的内存分配系统的计算机-您可分配的内存实际上可能是无限的。

    这是完整的规范部分7.20.3.3 malloc函数

    概要

    1个 #include <stdlib.h>
       void *malloc(size_t size);

    描述

    2该malloc函数为大小由其指定size且值不确定的对象分配空间。

    退货

    3该malloc函数返回空指针或指向分配空间的指针。

    这是整个规范的全部,因此您可以依靠的确实没有任何限制。


查看完整回答
反对 回复 2019-12-26
?
撒科打诨

TA贡献1934条经验 获得超2个赞

sizeof(char)始终为1个字节。字节并不总是一个八位位组,但是:例如,德州仪器(TI)TI C55x是具有16位字节的DSP。


查看完整回答
反对 回复 2019-12-26
?
守着一只汪

TA贡献1872条经验 获得超3个赞

sizeof(char)定义为始终为1。从C99:

当将其应用于具有char,unsigned char或signed char类型(或其限定版本)的操作数时,结果为1。

但是,不能保证为8位。实际上,在绝大多数平台上都可以,但不可以,但从技术上讲,您不能始终依靠这种方式(也不要紧,sizeof无论如何都应使用)。


查看完整回答
反对 回复 2019-12-26
  • 3 回答
  • 0 关注
  • 855 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信