c语言结构体封装,失落的c语言结构体封装艺术.doc
发布日期:2021-09-14 01:15:52 浏览次数:2 分类:技术文章

本文共 1998 字,大约阅读时间需要 6 分钟。

PAGE / NUMPAGES

失落的C语言结构体封装艺术(1)

本文是关于削减C语言程序内存占用空间的一项技术——为了减小内存大小而手工重新封装C结构体声明。你需要C语言的基本知识来读懂本文。

AD:

1. 谁该阅读这篇文章

本文是关于削减C语言程序内存占用空间的一项技术 为了减小内存大小而手工重新封装C结构体声明。你需要C语言的基本知识来读懂本文。资料个人收集整理,勿做商业用途

如果你要为内存有限制的嵌入式系统、或者操作系统内核写代码,那么你需要懂这项技术。如果你在处理极大的应用程序数据集,以至于你的程序常常达到内存的界限时,这项技术是有帮助的。在任何你真的真的需要关注将高速缓存行未命中降到最低的应用程序里,懂得这项技术是很好的。资料个人收集整理,勿做商业用途

最后,理解该技术是一个通往其他深奥的C语言话题的入口。直到你掌握了它,你才成为一个高端的C程序员。直到你可以自己写出这篇文档并且可以理智地评论它,你才成为一位C语言大师。资料个人收集整理,勿做商业用途

2. 我为什么写这篇文章

本文之所以存在,是因为在2013年底,我发现我自己在大量使用一项C语言的优化技术,我早在二十多年前就已经学会了该技术,不过在那之后并没怎么使用过。资料个人收集整理,勿做商业用途

我需要减小一个程序的内存占用空间,它用了几千 有时是几十万个 C结构体的实例。这个程序是cvs-fast-export,而问题在于处理巨大的代码库时,它曾因内存耗尽的错误而濒临崩溃。资料个人收集整理,勿做商业用途

在这类情况下,有好些办法能极大地减少内存使用的,比如小心地重新安排结构体成员的顺序之类的。这可以获得巨大的收益 在我的事例中,我能够减掉大约40%的工作区大小,使得程序能够在不崩溃的情况下处理大得多的代码库。资料个人收集整理,勿做商业用途

当我解决这个问题,并且回想我所做的工作时,我开始发现,我在用的这个技术现今应被忘了大半了。一个网络调查确认,C程序员好像已经不再谈论该技术了,至少在搜索引擎可以看到的地方不谈论了。有几个维基百科条目触及了这个话题,但是我发现没人能全面涵盖。资料个人收集整理,勿做商业用途

实际上这个现象也是有合理的理由的。 水草玛瑙 mnwg.net计算机科学课程(应当)引导人们避开细节的优化而去寻找更好的算法。机器资源价格的暴跌已经使得压榨内存用量变 得不那么必要了。而且,想当年,骇客们曾经学习如何使用该技术,使得他们在陌生的硬件架构上撞墙了 现在已经不太常见的经历。资料个人收集整理,勿做商业用途

但是这项技术仍然在重要的场合有价值, 并且只要内存有限,就能永存。本文目的就是让C程序员免于重新找寻这 高山茶 eupai.net项技术,而让他们可以集中精力在更重要的事情上。资料个人收集整理,勿做商业用途

3. 对齐要求(Alignment Requirement)

要明白的第一件事是,在现代处理器上,你的C编译器在内存里对基本的C数据类型的存放方式是受约束的,为的是内存访问更快。资料个人收集整理,勿做商业用途

在x86或者ARM处理器上,基本的C数据类型的储存一般并不是起始于内存中的任意字节地址。而是,每种类型,除了字符型以外,都有对齐要求;字符 可以起始于任何字节地址,但是2字节的短整型必须起始于一个偶数地址,4字节整型或者浮点型必须起始于被4整除的地址,以及8字节长整型或者双精度浮点型 必须起始于被8整除的地址。带符号与不带符号之间没有差别。资料个人收集整理,勿做商业用途

这个的行话叫:在x86和ARM上,基本的C语言类型是自对齐(self-aligned)的。指针,无论是32位(4字节)亦或是64位(8字节)也都是自对齐的。资料个人收集整理,勿做商业用途

自对齐使得访问更快,因为它使得一条指令就完成对类型化数据的取和存操作。没有对齐的约束,反过来,代码最终可能会不得不跨越机器字的边界做两次或更多次访问。字符是特殊的情况;无论在一个单机器字中的何处,存取的花费都是一样的。那就是为什么字符型没有被建议对齐。资料个人收集整理,勿做商业用途

我说 在现代的处理器上 是因为,在一些旧的处理器上,强制让你的C程序违反对齐约束(比方说,将一个奇数的地址转换成一个整型指针,并试图使用 它)不仅会使你的代码慢下来,还会造成非法指令的错误。比如在Sun的SPARC芯片上就曾经这么干。实际上,只要够决心并在处理器上设定正确(e18) 的硬件标志位,你仍然可以在x86上触发此错误。资料个人收集整理,勿做商业用途

此外,自对齐不是唯一的可能的规则。历史上,一些处理器(特别是那些缺少移位暂存器的)有更强的限制性规则。如果你做嵌入式系统,你也许会在跌倒在这些丛林陷阱中。注意,这是有可能的。资料个人收集整理,勿做商业用途

有时你可以通过编译指示,强制让你的编译器

转载地址:https://blog.csdn.net/weixin_40002224/article/details/117166895 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:os随机事件模拟c语言实验指导书,OS实验指导书(蒋剑修改).doc
下一篇:c语言编程基础知识总结pdf,C语言基础知识点总结.pdf

发表评论

最新留言

关注你微信了!
[***.104.42.241]2024年04月12日 10时44分58秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章