C和C的优化工具++; < Windows和Linux系统的哪些工具可以用来确定与VisualC++和GCC生成的代码相关的对齐问题、缓存缺失和其他参数?我可以使用这些工具来确定结构的对齐方式,从而避免编译器生成的填充吗?
要确定缓存未命中,您需要一个CPU级别的探查器,如C和C的优化工具++; < Windows和Linux系统的哪些工具可以用来确定与VisualC++和GCC生成的代码相关的对齐问题、缓存缺失和其他参数?我可以使用这些工具来确定结构的对齐方式,从而避免编译器生成的填充吗?,c++,c,visual-studio,optimization,gcc,C++,C,Visual Studio,Optimization,Gcc,要确定缓存未命中,您需要一个CPU级别的探查器,如oprofile或vtune,或者一个动态检测工具,如valgrind和cachegrind 要查找结构上的对齐问题,有一个名为pahole的工具,用于包含DWARF调试信息的对象文件。如果要避免在数据结构中填充,可以使用\uu属性((uuuu packed_u))用于gcc或microsoft visual studio\35; pragma(pack(push,1))在声明结构之前,在声明结构之后。 您还可以将命令行选项提供给microsof
oprofile
或vtune
,或者一个动态检测工具,如valgrind
和cachegrind
要查找结构上的对齐问题,有一个名为
pahole
的工具,用于包含DWARF
调试信息的对象文件。如果要避免在数据结构中填充,可以使用\uu属性((uuuu packed_u))
用于gcc或microsoft visual studio\35; pragma(pack(push,1))
在声明结构之前,在声明结构之后。
您还可以将命令行选项提供给microsoft visual studio编译器/Zp1,用于按一个字节进行打包,或使用gcc-falign function=8,用于按一个字节边界进行打包。您的代码库可能会更小,但这可能会对您的性能产生严重的负面影响…自动填充可以消除对齐问题…在堆栈溢出时,您的问题应该用问题而不是命令来表达,否则您会让许多潜在的回答者望而却步。我编辑了你的帖子来反映这一点。谢谢你的回复。有没有类似pahole的windows工具?顺便说一句,您能否详细介绍或介绍有关在vtune/kcachegrind中启用缓存参数的教程?不仅仅是性能。如果您有一个结构{char,int},int将不再正确对齐,这意味着它将不再以原子方式更新。。