查找分配数据的未使用位

Posted

技术标签:

【中文标题】查找分配数据的未使用位【英文标题】:Finding Unexercised Bits of Allocated Data 【发布时间】:2014-04-23 20:58:31 【问题描述】:

是否有工具可以检查 C/C++ 中分配的数据中未使用的位?

当我们试图减少用 C++ 编写的 DMD D 编译器的内存消耗时,我们可以使用这样的工具。详情请参阅this post。

更新:我猜Massif 是一个很好的竞争者,对吧?

【问题讨论】:

什么是“未行使位”? 未使用的位。例如,C enum 默认为 32 位,但几乎从来没有所有这些位都用于存储信息。如果您使用带有n 替代ceil(log2(n)) 位的枚举。 【参考方案1】:

阅读对话后,我认为您应该做的第一件事就是按照您的建议使用地块。 然后,如果您看到某些特定类型被分配了很多,您可以查看它。

尽管如此,在我看来,未使用的位并不像编译器中的关键内存消耗者一样,但在 AST 构造和最重要的优化 (ipo) 中应该有更大的东西。

此外,如果您发现某些类型通过切换到占用空间较小的类型而实际上在尺寸方面受益,请确保对性能进行基准测试。基准测试很重要,因为如果一种特定的 4/8 字节类型足以产生影响,那么在对不是其原生字长的类型进行计算时,cpus 通常会变慢,

见:Performance of built-in types : char vs short vs int vs. float vs. double

【讨论】:

以上是关于查找分配数据的未使用位的主要内容,如果未能解决你的问题,请参考以下文章

使用正则表达式查找 C# 样式的未转义字符串

反射式DLL注入--方法

虚拟内存无法设置的问题,谁来解决一下?

显式结构布局上的未分配字段

字符串查找(重复次数)

熊猫数据框在不同的数据框中查找一个值并分配一个值