Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和Unix的多用户、多任务、支持多线程和多CPU的操作系统。它能运行主要的Unix工具软件、应用程序和网络协议。它支持32位和64位硬件。Linux继承了Unix以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。
分享到: 分享到QQ  分享到Twitter

作者: BigLoser    访问次数: 276 创建时间: 2022-12-08 21:39:01 更新时间: 2024-04-27 01:59:38

在下周 Linux 6.2 合并窗口打开之前的早期拉取请求中,有一项更改是默认为 Linux 内核构建启用 “-funsigned-char”,这意味着如果没有指定,“-funsigned-char” 编译器标志会将所有 “char” 字符类型设为无符号。

 

C 的 char 字符数据类型分为 signed char 和 unsigned char,其中 unsigned char 占用内存的所有 8 位并且没有符号位。

灯箱

 

char 在标准中是 unsigned,但不同的 CPU 体系结构 / 编译器能将其实现为 signed,也可以实现为 unsigned 。但此更改合并后,对于使用普通 “char” 类型编写的内核代码, 将普遍将默认 char 类型视为 unsigned 。

 

WireGuard 首席开发人员 Jason Donenfeld 领导了 Linux 内核的 -funsigned-char 转换工作。早在 Linux 6.1 版本,Jason Donenfeld 在 ARM 上编译驱动程序时触发了构建错误,当时驱动程序假定裸 char 类型已签名,但 ARM 将其视为未签名, C 标准则表示它依赖于体系结构。

 

发现这个 Char 类型混乱的问题后,他提出了 “treat char as always unsigned” 构建请求。并为 Linux 6.2 发送了一个默认启用 unsigned char 行为的早期 PR ,以及针对内核代码对 char 类型的符号性做出不同假设的各种内核修复。

 

感兴趣的朋友可以在构建请求和早期 PR 邮件中查阅更多详情。

季度最有价值文章

月度最有价值文章

投票统计

是否原创: 0 %

0 % Complete (success)

是否有价值: 0 %

0% Complete

是否有素质: 0 %

0% Complete (warning)

是否合法: 0 %

0% Complete

   群组工具

   外部链接