【问题标题】:Optimization tools for C and C++C 和 C++ 的优化工具
【发布时间】:2011-09-14 07:34:59
【问题描述】:

我可以使用哪些适用于 Windows 和 Linux 系统的工具来确定对齐问题、缓存未命中以及与 Visual C++ 和 GCC 生成的代码相关的其他参数?我可以使用这些工具来确定结构的对齐方式,从而避免编译器生成的填充吗?

【问题讨论】:

  • 自动填充可以消除对齐问题...
  • 在 Stack Overflow 上,您的问题应该被表述为问题而不是命令,否则您会推迟很多潜在的回答者。我已编辑您的帖子以反映这一点。

标签: c++ c visual-studio optimization gcc


【解决方案1】:

如果您想避免数据结构中的填充,您可以在声明结构之前使用__attribute__((__packed__)) 用于 gcc 或用于 microsoft visual studio #pragma(pack(push,1)),并在声明结构之后使用#pragma(pop)。 您还可以将命令行选项提供给 microsoft Visual Studio 编译器 /Zp1 以在一个字节 http://msdn.microsoft.com/en-us/library/xh3e3fd0(v=vs.80).aspx 处打包,或者使用 gcc -falign-function=8 在 1 字节边界处打包。您的代码库会更小,但这可能会对您的性能产​​生严重的负面影响...

【讨论】:

  • 不仅仅是性能。如果您有一个 struct { char, int },则 int 将不再正确对齐,这意味着它将不再以原子方式更新..
【解决方案2】:

要确定缓存未命中,您需要一个 CPU 级别的分析器,如 oprofilevtune,或一个动态检测工具,如 valgrindcachegrind

要查找结构的对齐问题,有一个名为 pahole 的工具,用于带有 DWARF 调试信息的目标文件。

【讨论】:

  • 感谢您的回复。有没有类似pahole的windows工具?顺便说一句,您能否详细说明或指出有关在 vtune / kcachegrind 中启用缓存参数的教程?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-14
  • 1970-01-01
相关资源
最近更新 更多