gpt4 book ai didi

C:代码位置的高效编码

转载 作者:行者123 更新时间:2023-11-30 15:18:28 25 4
gpt4 key购买 nike

我希望在每次进行内存分配时对位置(例如文件/行)进行编码。我的代码库中有超过 3,000 个,所以我真的不想对其进行硬编码。

我使用了一个宏,它只传入FILELINE,效果很好。

现在我想将其与每个分配一起存储,因此需要对其进行压缩。我对 FILE 使用了最小完美散列,这使得 (FILE, LINE) 对适合在 32 位整数内。

但是,计算每次分配的 MPH 成本太高(主要是因为它首先循环遍历字符串计算主哈希)。由于所有字符串都是恒定的,MPH 是恒定的并且一切都是恒定的,因此应该有一种更快的方法来计算它。

或者,有谁知道更好的方法来计算代码位置,以便可以有效地查找和存储它们(我也查看了 boost 库 PP_COUNTER 宏)?谢谢!

最佳答案

代码位置已由 { __FILE__, __LINE__ } 有效编码。

__FILE__扩展为一个字符串文字,它(在C99中,可能更早)是“用于初始化静态存储持续时间的数组”,你可以通过在它的地址中,这就是您所需要的并且不需要压缩。我已经在 VMS C、AIX C 和 MSVS C 中这样做了(可选地包括当前函数名称),没有任何问题,而且非常有帮助。

注意

  • 理论上,一个非常糟糕的编译器可能不会池化字符串文字,甚至不会池化__FILE__,从而导致对象代码臃肿,但这在极端情况下似乎不太可能!
  • 只要您的编译器对字符串文字进行池化,您就可以计算地址的哈希值(如果您需要的话)。
  • 我发现 C++ 函数名宏可能是函数调用,因此该技术可能在那里不适用。

关于C:代码位置的高效编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31442113/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com