gcc - 如何在 linux 上内联 string.h 函数?

标签 gcc inline string.h

我想优化一些代码,以便内联 string.h 中的所有函数。我在 x86_64 上。

我试过 -O3、-minline-all-stringops,当我执行“nm a.out”时,它显示它正在调用 glibc 版本。

使用 gcc -S 检查,我看到了调用。

我错过了什么? string.h 中有几十个#ifdef _SOME_SETTING_,bits/string3.h 显示了内联版本,但我不知道如何到达那里。

例如:

$ cat test.c
#include <string.h>

main() {
    char *a, *b;
    strcpy(b,a);
}
/*

When compiled with:

gcc -minline-all-stringops -O6 -I. -S -o test.S test.c

Produces:

    .file   "test.c"
    .text
    .p2align 4,,15
.globl main
    .type   main, @function
main:
.LFB12:
    .cfi_startproc
    subq    $8, %rsp
    .cfi_def_cfa_offset 16
    xorl    %esi, %esi
    xorl    %edi, %edi
    call    strcpy
    addq    $8, %rsp
    .cfi_def_cfa_offset 8
    ret
    .cfi_endproc
.LFE12:
    .size   main, .-main
    .ident  "GCC: (GNU) 4.5.1 20100924 (Red Hat 4.5.1-4)"
    .section    .note.GNU-stack,"",@progbits
*/

最佳答案

如果函数实现不在头文件和单独的编译单元中,则不能内联,除非您有可以执行 LTCG 的编译器。

听起来您需要自己编写实现。

关于gcc - 如何在 linux 上内联 string.h 函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5187735/

相关文章:

c++ - 实现以恒定间隔刷新的缓冲流的标准方法?

内联 C 库中的调用函数

c++ - 关于内联性能的问题

c - 从ansi C中的字符串中删除空格

qt - 在Mac OS下如何将最新版本的GCC(4.6)与Qt一起使用?

c++ - C++ 中的数学接口(interface)与 cMath

templates - gcc模板继承问题

ios - 无论如何,可以在iOS中内嵌播放视频吗?

c - 在没有库和指针的情况下构建 strcat

c - 如何将文本文件中的一行子字符串保存到字符串数组中?