我正在尝试查找有关 glibc 的信息以及它在多大程度上使用 SSE 功能。
如果它经过优化,我可以直接使用它吗?
假设我使用的是较大的 Linux 发行版之一,我假设它的 glibc 被编译为尽可能通用并尽可能便携,因此没有优化?
我对函数 memcpy 和 memcmp 以及如何尽快获得这些函数特别感兴趣。
我正在尝试查找有关 glibc 的信息以及它在多大程度上使用 SSE 功能。
如果它经过优化,我可以直接使用它吗?
假设我使用的是较大的 Linux 发行版之一,我假设它的 glibc 被编译为尽可能通用并尽可能便携,因此没有优化?
我对函数 memcpy 和 memcmp 以及如何尽快获得这些函数特别感兴趣。
glibc 2.8 根本不将 SSE 用于 memcpy 或 memcmp(在 x86 或 x86_64 中) - 它使用一些手写程序集来避免该系列的所有 CPU 不支持的任何内容。在 glibc 2.10 中,将支持一种新的重定位类型STT_GNU_IFUNC,这将使基于 CPU 支持的更好的优化成为可能。
如果您使用最高优化设置进行编译,则 memcpy 和 memcmp 可能会被编译器替换为内部函数,并且根本不会调用 glibc。然后mcpu和march编译器选项会选择最快的代码。