<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>内存对齐 on Tony Bai</title><link>https://tonybai.com/tags/%E5%86%85%E5%AD%98%E5%AF%B9%E9%BD%90/</link><description>Recent content in 内存对齐 on Tony Bai</description><generator>Hugo</generator><language>zh-cn</language><copyright>2004-2026 Tony Bai. 版权所有.</copyright><lastBuildDate>Thu, 02 Oct 2025 00:00:00 +0800</lastBuildDate><atom:link href="https://tonybai.com/tags/%E5%86%85%E5%AD%98%E5%AF%B9%E9%BD%90/index.xml" rel="self" type="application/rss+xml"/><item><title>Go 考古：Slice 的“隐秘角落”——只读切片与扩容策略的权衡</title><link>https://tonybai.com/2025/10/02/go-archaeology-slice/</link><pubDate>Thu, 02 Oct 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/10/02/go-archaeology-slice/</guid><description>本文永久链接 – https://tonybai.com/2025/10/02/go-archaeology-slice 大家好，我是Tony Bai。 slice（切片），可以说是 Go 语言中最重要、也最常用的数据结构，没有之一。我们每天都在使用它，尤其是 append 函数，它就像一个魔术师，总能“恰到好处”地为我们管理好底层数组的容量，让我们几乎感受不到内存分配的烦恼。 但你是否想过，这份...</description></item><item><title>Go新垃圾回收器登场：Green Tea GC如何通过内存感知显著降低CPU开销？</title><link>https://tonybai.com/2025/05/03/go-green-tea-garbage-collector/</link><pubDate>Sat, 03 May 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/05/03/go-green-tea-garbage-collector/</guid><description>Go新垃圾回收器登场：Green Tea GC如何通过内存感知显著降低CPU开销？ - Tony Bai =============== Tony Bai 一个程序员的心路历程 * Google Go语言编码风格规范 * Google Go语言编码风格规范：指南篇 * Google Go语言编码风格规范：决定篇 * Google Go语言编码风格规范：最佳实践篇 * Go语言第一课FAQ * Go...</description></item><item><title>Go GC如何检测内存对象中是否包含指针</title><link>https://tonybai.com/2022/02/21/how-gc-detect-pointer-in-mem-obj/</link><pubDate>Mon, 21 Feb 2022 00:00:00 +0800</pubDate><guid>https://tonybai.com/2022/02/21/how-gc-detect-pointer-in-mem-obj/</guid><description>本文永久链接 – https://tonybai.com/2022/02/21/how-gc-detect-pointer-in-mem-obj 众所周知，Go是带垃圾回收(GC)的编程语言，开发者通常不需要考虑对内存的管理，降低了心智负担。Go程序运行的时候，GC在背后默默辛劳地为开发者**“擦屁股”**：把无法reach到的内存对象定期地释放掉以备后续重用。 GC只关心**指针**，只要被扫描...</description></item><item><title>Recommended C Style and Coding Standards中文版全文</title><link>https://tonybai.com/2013/11/26/the-full-text-of-recommended-c-style-and-coding-standards/</link><pubDate>Tue, 26 Nov 2013 00:00:00 +0800</pubDate><guid>https://tonybai.com/2013/11/26/the-full-text-of-recommended-c-style-and-coding-standards/</guid><description>今天无意中打开了托管在Google Code上的“Recommended C Style and Coding Standards”翻译项目，忽感觉通过目录链接的方式查看译文缺少整体感，于是花了点时间将译文全文以single page的形式贴在博客里面，方便大家查看，也算是对该翻译内容的一个备份吧。 **C语言编码风格和标准** **0\. 摘要** 本文翻译自《Recommended C Sty...</description></item><item><title>一种基于内存映射文件的系统运行数据提取方法</title><link>https://tonybai.com/2013/03/18/sys-running-data-extraction-method-using-mmap/</link><pubDate>Mon, 18 Mar 2013 00:00:00 +0800</pubDate><guid>https://tonybai.com/2013/03/18/sys-running-data-extraction-method-using-mmap/</guid><description>这是我无意中想到的一个方法，估计这个方法已经不是什么新鲜的东西了，很可能在类似的问题场景中早已经被使用了。不过这里还是要说说我的思维过程。 近期在学习一些Linux性能查看和分析方面的工具，比如top、iostat、vmstat以及sar等。在学习过程中我发现这些工具有个共同的特点，那就是她们采集的Linux运行数据都是从/proc下的文件中实时获取并计算而得出的。众所周知，/proc是Linux...</description></item><item><title>偿还N年前的一笔技术债</title><link>https://tonybai.com/2011/07/21/pay-for-a-tech-debt-of-several-year-ago/</link><pubDate>Thu, 21 Jul 2011 00:00:00 +0800</pubDate><guid>https://tonybai.com/2011/07/21/pay-for-a-tech-debt-of-several-year-ago/</guid><description>记得刚来公司时曾参与过一个项目，项目中用到了部门基础库中的一个B+树接口。不过在程序调试过程中我们发现可执行程序总是dump core（在sparc solaris上），经初步分析，断定问题就出在B+树接口处，但一时又找不到问题原因。还好这个B+树的实现者就坐在我的旁边。他分析后告诉我：这个B+树接口要求用户自定义的索引结构体的size应该为4的整数倍。按照他的说法，我为结构体打了padding，...</description></item><item><title>四谈内存对齐</title><link>https://tonybai.com/2008/11/17/httptonybai-com20061208talk-about-memory-alignment-the-4th-time/</link><pubDate>Mon, 17 Nov 2008 00:00:00 +0800</pubDate><guid>https://tonybai.com/2008/11/17/httptonybai-com20061208talk-about-memory-alignment-the-4th-time/</guid><description>最近在思考改进项目中一模块的实现，该模块维护起来让我很是头疼，所有才有了整体换掉它的想法。设计和实现中利用了内存对齐的技术。关于内存对齐，我曾经写过三篇文章，第一篇介绍了计算内存对齐的方法和例子，第二篇说了一个内存对齐的应用；三谈内存对齐时，则从其本质上做了阐述，而这次实际上是继续在其本质上的做文章，结合本质谈谈为什么内存对齐的计算方法就应该是第一篇中所讲的那两条。 如果对内存对齐本质还不清楚的话...</description></item><item><title>关于宏定义切换以及屏蔽的例子</title><link>https://tonybai.com/2008/05/17/examples-for-macro-definition-switch-and-mask/</link><pubDate>Sat, 17 May 2008 00:00:00 +0800</pubDate><guid>https://tonybai.com/2008/05/17/examples-for-macro-definition-switch-and-mask/</guid><description>assert是大家常用的宏，它的用法相信大家都有所了解。P.J Plauger的&amp;#34;The C Standard Library&amp;#34;一书中提到在源代码中切换assert宏定义的方法： /\* turn assertion on \*/ #undef NDEBUG #include /\* turn assertions off \*/ #define NDEBUG #include 我顺手写了一个例子...</description></item><item><title>也谈C语言标识符的NAMESPACE</title><link>https://tonybai.com/2008/05/15/also-talk-about-namespace-in-c/</link><pubDate>Thu, 15 May 2008 00:00:00 +0800</pubDate><guid>https://tonybai.com/2008/05/15/also-talk-about-namespace-in-c/</guid><description>P.J Plauger的&amp;#34;The Standard C Library&amp;#34;一书的Chapter0的章后练习中有这样的一道题：编写一个包含如下一行语句的正确的程序： x:      ((struct x\*)x)-&amp;gt;x=x(5); 并描述这行语句中x的5种截然不同的use，这里其实涉及到这么一个知识或者说概念：C语言的命名空间(namespace)，在&amp;#34;C语言参考手册&amp;#34;中还被称作: overloadi...</description></item><item><title>也谈C语言变长参数</title><link>https://tonybai.com/2008/05/07/also-talk-about-c-variable-length-args/</link><pubDate>Wed, 07 May 2008 00:00:00 +0800</pubDate><guid>https://tonybai.com/2008/05/07/also-talk-about-c-variable-length-args/</guid><description>很多技术人员都有在&amp;#34;技术细节&amp;#34;上&amp;#34;钻牛角尖&amp;#34;的&amp;#34;癖好&amp;#34;，对此很多人褒贬不一；无论怎样，我也是属于这类人。C语言的变长参数在平时做开发时很少会在自己设计的接口中用到，但我们最常用的接口printf就是使用的变长参数接口，在感受到printf强大的魅力的同时，是否想挖据一下到底printf是如何实现的呢？这里我们一起来挖掘一下C语言变长参数的奥秘。 先考虑这样一个问题：如果我们不使用C标准库(libc...</description></item><item><title>也谈’SIGBUS和SIGSEGV’</title><link>https://tonybai.com/2007/12/19/also-talk-about-sigbus-and-sigsegv/</link><pubDate>Wed, 19 Dec 2007 00:00:00 +0800</pubDate><guid>https://tonybai.com/2007/12/19/also-talk-about-sigbus-and-sigsegv/</guid><description>SIGBUS和SIGSEGV也许是我们在平时遇到的次数最多的两个内存错误信号。内存问题一直是最令我们头疼的事情，弄清楚两个信号的发生缘由对我们很好的理解程序的运行是大有裨益的。 我们来看两段程序： //testsigsegv.c int main() {         char \*pc = (char\*)0×00001111;         \*pc = 17; } //testsigbu...</description></item><item><title>从本源看世界-读'Write Great Code'</title><link>https://tonybai.com/2006/12/22/write-great-code-reading-note/</link><pubDate>Fri, 22 Dec 2006 00:00:00 +0800</pubDate><guid>https://tonybai.com/2006/12/22/write-great-code-reading-note/</guid><description>以前曾经说过自己并非计算机科班出身。想想自己在大学时的学习过程未免有些底气不足，记得当时一直坚持去旁听计算机专业的课，但是鉴于本专业老师的点名和课堂作业，自己未免耽误了很多节课，弄得自己学的很不系统，效果不是很好。工作后一直从事应用级的开发，对计算机方面基础的本源性的知识也逐渐陌生起来。但我是那种知其然也要知其所以然的人，这两年也不间断的买了不少讲解计算机底层知识的书，目的是让那些计算机本源性的东...</description></item><item><title>三谈内存对齐－背后的故事</title><link>https://tonybai.com/2006/12/08/talk-about-memory-alignment-the-3rd-time/</link><pubDate>Fri, 08 Dec 2006 00:00:00 +0800</pubDate><guid>https://tonybai.com/2006/12/08/talk-about-memory-alignment-the-3rd-time/</guid><description>记得以前曾经两次谈到过内存对齐话题，一次在&amp;#39;也谈内存对齐&amp;#39;一文中，另一次则是&amp;#39;也谈内存对齐(续)&amp;#39;，今天下午和同事又谈到内存对齐的问题了，遂想继续挖掘下去，看看其背后的故事。 关于内存对齐的中文文章多在介绍对齐的&amp;#39;法则&amp;#39;，比如为什么sizeof(T)和我们估计的T的大小有出入呢等等，而对于内存对齐的本质少有介绍，我在Google上搜索了一阵后，在IBM开发社区上发现一篇叫&amp;#39;Data alignme...</description></item><item><title>也谈内存对齐(续)</title><link>https://tonybai.com/2006/06/14/also-talk-about-memory-alignment-cont/</link><pubDate>Wed, 14 Jun 2006 00:00:00 +0800</pubDate><guid>https://tonybai.com/2006/06/14/also-talk-about-memory-alignment-cont/</guid><description>关于内存对齐的话题，始终是敏感的。稍有不慎，必将闯下大祸！最近项目稍显轻闲，自己给自己安排一天反思和总结一下，突然想到以前写过的一篇&amp;#39;也谈内存对齐&amp;#39;，那篇文章谈的是内存对齐的基本知识以及一些实验的数据，想必很多人看完后，会收获一些东西，但是对内存对齐的应用还是处于懵懂状态，其实大部分时间我们是不会显式的用到&amp;#39;内存对齐的&amp;#39;，但是有些时候我们需要这样做。这里做了一个小例子，希望能给大家以启发。 例子是...</description></item><item><title>再说内存</title><link>https://tonybai.com/2005/11/02/talk-about-memory-again/</link><pubDate>Wed, 02 Nov 2005 00:00:00 +0800</pubDate><guid>https://tonybai.com/2005/11/02/talk-about-memory-again/</guid><description>离我的上一篇BLOG已经时隔一个月有余，项目忙是一方面原因，最主要的还是自己没什么“收获”。在最近的项目中总是和内存打交道，时间长了，便有了些许问题，原本我就不是不求甚解者，遂趁此机会又复习了些内存相关资料。 其实下面的话题都是源于在实际项目中碰到的问题，我们通过推敲一句话来开始吧! 1、推敲一句话 在《C专家编程》一书中，有这样的说法“Malloced memory is always alig...</description></item><item><title>也谈内存对齐</title><link>https://tonybai.com/2005/08/09/also-talk-about-memory-alignment/</link><pubDate>Tue, 09 Aug 2005 00:00:00 +0800</pubDate><guid>https://tonybai.com/2005/08/09/also-talk-about-memory-alignment/</guid><description>在最近的项目中，我们涉及到了“内存对齐”技术。对于大部分程序员来说，“内存对齐”对他们来说都应该是“透明的”。“内存对齐”应该是编译器的“管辖范围”。编译器为程序中的每个“数据单元”安排在适当的位置上。但是C语言的一个特点就是太灵活，太强大，它允许你干预“内存对齐”。如果你想了解更加底层的秘密，“内存对齐”对你就不应该再透明了。 一、内存对齐的原因 大部分的参考资料都是如是说的： 1、平台原因(移...</description></item></channel></rss>