GCC 15.1:C++26 新特性抢先看

2025-04-25
GCC 15.1:C++26 新特性抢先看

GCC 15.1 预计将于2025年4月或5月发布,它带来了大量C++改进,包括C++26特性:包索引、结构化绑定属性、改进的`=delete`函数支持等。此外,它还修复了许多缺陷报告,改进了模块支持,并提升了编译速度。一些值得关注的新特性还有:constexpr placement new、改进的range-based for循环、更早诊断的限定查找失败以及新的警告选项。GCC 15.1 将为 C++ 开发者带来显著的效率提升和更强大的功能。

阅读更多
开发

GCC 15: 编译器诊断的六大改进

2025-04-10
GCC 15: 编译器诊断的六大改进

Red Hat工程师在GCC 15中对编译器诊断进行了六项重大改进,旨在提升易用性。改进包括:更美观的代码执行路径可视化,采用ASCII艺术和警告表情符号;改进C++模板错误显示,采用嵌套结构提升可读性;支持同时输出文本和SARIF格式诊断信息;更平滑的C23过渡,改进错误信息以提示C23兼容性问题;改进颜色方案,使用颜色突出显示源代码中的差异;以及提供libgdiagnostics共享库,方便其他项目使用GCC的诊断功能。这些改进将显著提升GCC的开发者体验。

阅读更多
开发

使 memcpy(NULL, NULL, 0) 行为明确定义

2024-12-11
使 memcpy(NULL, NULL, 0) 行为明确定义

C语言标准C2y接受了N3322提案,将移除memcpy(NULL, NULL, 0)、memcmp(NULL, NULL, 0)等零长度操作的未定义行为,使其行为明确定义。这有助于消除潜在的安全漏洞和编译器过度优化带来的问题,并简化代码编写。文章还探讨了空指针运算的定义,以及提案在标准化过程中遇到的争议和最终获得的支持。

阅读更多
未分类

帧指针展开的局限性

2024-11-04
帧指针展开的局限性

本文讨论了在Linux发行版中禁用帧指针优化带来的性能分析问题。虽然禁用帧指针可以提高性能,但也使得perf_events等分析工具难以生成用户空间代码的堆栈跟踪。启用帧指针虽然可以解决这个问题,但也存在一些局限性:性能提升和损失的分布不均,函数的prologue和epilogue部分的堆栈跟踪不准确,以及汇编代码函数的处理问题。文章最后介绍了一些替代方案,如eu-stacktrace、SFrame和硬件支持的影子堆栈,这些方案有望在不依赖帧指针的情况下实现更准确的性能分析。

阅读更多
未分类 帧指针

深入解析 Go 编译器的寄存器分配机制

2024-09-26
深入解析 Go 编译器的寄存器分配机制

本文深入研究了Go编译器中鲜为人知的寄存器分配(RA)机制。Go RA采用基于SSA的局部寄存器分配策略,并进行了一些全局优化。文章详细介绍了其工作原理、关键组件、数据结构和算法,并分析了其优缺点,包括快速、堆栈槽共享良好,但也存在全局视图不足、SSA处理复杂等问题。

阅读更多
未分类 寄存器分配

GCC 新的安全强化等级:收益与成本

2024-06-26
GCC 新的安全强化等级:收益与成本

这篇文章介绍了 GCC 中支持的一种新的防御级别。这个新级别可以检测到更多的缓冲区溢出和错误,从而在运行时减少应用程序中的安全问题。GCC 12 中一个名为 `__builtin_dynamic_object_size` 的新内置程序是这个新防御级别的基础,它比之前在 `_FORTIFY_SOURCE=2` 中使用的 `__builtin_object_size` 内置程序更加强大。文章进一步讨论了增强后的安全防御带来的两大收益:增强的缓冲区大小检测和更好的防御覆盖范围,并用具体的代码示例和案例分析进行了说明。

阅读更多
未分类

Shenandoah 垃圾收集器初学者指南

2024-05-29
Shenandoah 垃圾收集器初学者指南

这篇文章是关于红帽 Shenandoah 垃圾收集器的介绍,涵盖了其基本功能、用例、垃圾收集 (GC) 日志记录和基本故障排除。Shenandoah 是一个高性能、低停顿时间的垃圾收集器,采用并发、基于位置的 GC 算法,不基于分代。它以 3 个或 2 个并发阶段运行,目标是将停顿时间控制在 10 毫秒以内。文章还讨论了 Shenandoah 与 G1GC 的比较、何时使用 Shenandoah 以及何时不使用 Shenandoah。

阅读更多