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

2024-12-11

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

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

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

2024-06-26

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

阅读更多
未分类

Shenandoah 垃圾收集器初学者指南

2024-05-29

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

阅读更多