Как встроить функцию string.h в Linux? - PullRequest
4 голосов
/ 04 марта 2011

Я хочу оптимизировать некоторый код так, чтобы все функции в string.h были встроены. Я на x86_64.

Я пробовал -O3, -minline-all-stringops, и когда я делаю "nm a.out", он показывает, что он вызывает версию glibc.

Проверяя с помощью gcc -S, я вижу звонки.

Чего мне не хватает? В string.h есть десятки #ifdef _SOME_SETTING_, а биты / 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
*/

1 Ответ

1 голос
/ 04 марта 2011

Если реализация функции находится не в заголовочном файле, а в отдельном модуле компиляции, она не может быть встроена, если у вас нет компилятора, который может выполнять LTCG.

Похоже, вам нужно написать реализацию самостоятельно.

...