2

私はC++とCコードのパフォーマンスを改善することについて多くの質問を読みました。ほとんどすべての答えは、コンパイラによって生成されたアセンブリコードを観察することになります。

このテクニックを理解したい場合、そのための最良のリソースは何ですか?

4

1 に答える 1

5

練習はあなたの最高の先生です

簡単なテスト ファイルを作成します。

#include <stdio.h>

int main() {
    printf("Hello %s !\n", "world");
}

次にgcc -S test.cpp、生成されたアセンブリ コードが に表示されtest.sます。必要に応じて追加-Oxします。

    .file   "test.cpp"
    .section    .rodata
.LC0:
    .string "world"
.LC1:
    .string "Hello %s !\n"
    .text
    .globl  main
    .type   main, @function
main:
.LFB0:
    .cfi_startproc
    pushq   %rbp
    .cfi_def_cfa_offset 16
    .cfi_offset 6, -16
    movq    %rsp, %rbp
    .cfi_def_cfa_register 6
    movl    $.LC0, %esi
    movl    $.LC1, %edi
    movl    $0, %eax
    call    printf
    movl    $0, %eax
    popq    %rbp
    .cfi_def_cfa 7, 8
    ret
    .cfi_endproc
.LFE0:
    .size   main, .-main
    .ident  "GCC: (Debian 4.7.0-13) 4.7.0"
    .section    .note.GNU-stack,"",@progbits

アセンブリ言語を理解するのが難しい場合は、GNU assembly languagelinkers & loaders、およびから始めた方がよいでしょうIntel® 64 and IA-32 Architectures Software Developer’s Manual。素晴らしい参考書です。

于 2012-06-28T05:44:57.713 に答える