pqy330 pqy330
关注数: 0 粉丝数: 94 发帖数: 2,602 关注贴吧数: 1
gcc 有毒,把我代码优化成了死循环 -O0 -O1正常, -O2 -O3就把我calloc优化成死循环。换成clang就没问题。 calloc汇编里面又callcalloc@PLT: calloc: .LFB68: .cfi_startproc imulq%rdi, %rsi movqg_allocator(%rip), %rdx pushq%r12 .cfi_def_cfa_offset 16 .cfi_offset 12, -16 movl$8, %ecx pushq%rbp .cfi_def_cfa_offset 24 .cfi_offset 6, -24 pushq%rbx .cfi_def_cfa_offset 32 .cfi_offset 3, -32 leaq32(%rdx), %rbx cmpq$8, %rsi **e.L58 subq$1, %rsi movl$64, %ecx movl$1, %eax bsrq%rsi, %rsi xorq$63, %rsi subl%esi, %ecx sall%cl, %eax movslq%eax, %rcx .L58: movq16(%rdx), %rax xorl%edx, %edx divq%rcx movq%rax, %rbp testq%rbx, %rbx jne.L63 jmp.L59 .p2align 4,,10 .p2align 3 .L60: movq24(%rbx), %rax testq%rax, %rax je.L78 movq%rax, %rbx .L63: movl16(%rbx), %eax cmpq%rax, %rbp jne.L60 movl20(%rbx), %eax testl%eax, %eax je.L60 cmpl$1, %eax je.L79 .L59: popq%rbx .cfi_remember_state .cfi_def_cfa_offset 24 xorl%eax, %eax popq%rbp .cfi_def_cfa_offset 16 popq%r12 .cfi_def_cfa_offset 8 ret .p2align 4,,10 .p2align 3 .L78: .cfi_restore_state movl$1, %esi movl$32, %edi callcalloc@PLT movl%ebp, 16(%rax) movl%ebp, 20(%rax) movq%rax, 24(%rbx) xorl%eax, %eax popq%rbx .cfi_remember_state .cfi_def_cfa_offset 24 popq%rbp .cfi_def_cfa_offset 16 popq%r12 .cfi_def_cfa_offset 8 ret .p2align 4,,10 .p2align 3 .L79: .cfi_restore_state movl$32, %edi movq24(%rbx), %r12 callmalloc testq%rax, %rax je.L61 pxor%xmm0, %xmm0 movups%xmm0, (%rax) .L61: movq%r12, 24(%rax) movl%ebp, 16(%rax) movl%ebp, 20(%rax) movq%rax, 24(%rbx) jmp.L59 .cfi_endproc .LFE68: .sizecalloc, .-calloc .localg_allocator .commg_allocator,8,8 .ident"GCC: (Ubuntu 8.3.0-6ubuntu1~18.04) 8.3.0" .section.note.GNU-stack,"",@progbits
实现代码: aW1wb3J0IFF0UXVpY2sgMi4yCmltcG9ydCBRdFF1aWNrLlBhcnRpY2xlcyAyLjAKClJlY3RhbmdsZSB7CiAgICBjb2xvcjogImJsYWNrIgogICAgCiAgIAogICAgUGFydGljbGVTeXN0ZW0gewogICAgICAgIGFuY2hvcnMuZ mlsbDogcGFyZW50CiAgICAgICAgaWQ6IHN5c3N5CiAgICAgICAgLy8hIFswXQogICAgICAgIFBhcnRpY2xlR3JvdXAgewogICAgICAgICAgICBuYW1lOiAiZmlyZSIKICAgICAgICAgICAgZHVyYXRpb246IDE1MDAKICAgIC AgICAgICAgZHVyYXRpb25WYXJpYXRpb246IDIwMDAKICAgICAgICAgICAgdG86IHsic3Bsb2RlIjoxfQogICAgICAgIH0KICAgICAgICAvLyEgWzBdCiAgICAgICAgLy8hIFsxXQogICAgICAgIFBhcnRpY2xlR3JvdXAgewo gICAgICAgICAgICBuYW1lOiAic3Bsb2RlIgogICAgICAgICAgICBkdXJhdGlvbjogNDAwCiAgICAgICAgICAgIHRvOiB7ImRlYWQiOjF9CiAgICAgICAgICAgIFRyYWlsRW1pdHRlciB7CiAgICAgICAgICAgICAgICBncm91 cDogIndvcmtzIgogICAgICAgICAgICAgICAgZW1pdFJhdGVQZXJQYXJ0aWNsZTogNTAKICAgICAgICAgICAgICAgIGxpZmVTcGFuOiAxMDAwCiAgICAgICAgICAgICAgICBtYXhpbXVtRW1pdHRlZDogNjAwCiAgICAgICAgI CAgICAgICBzaXplOiAyMAogICAgICAgICAgICAgICAgdmVsb2NpdHk6IEFuZ2xlRGlyZWN0aW9uIHthbmdsZTogMjcwOyBhbmdsZVZhcmlhdGlvbjogNDU7IG1hZ25pdHVkZTogMjA7IG1hZ25pdHVkZVZhcmlhdGlvbjogMj A7fQogICAgICAgICAgICAgICAgYWNjZWxlcmF0aW9uOiBQb2ludERpcmVjdGlvbiB7eToxMDA7IHlWYXJpYXRpb246IDIwfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIC8vISBbMV0KICAgICAgICAvLyEgWzJ dCiAgICAgICAgUGFydGljbGVHcm91cCB7CiAgICAgICAgICAgIG5hbWU6ICJkZWFkIgogICAgICAgICAgICBkdXJhdGlvbjogMTAwMAogICAgICAgICAgICBBZmZlY3RvciB7CiAgICAgICAgICAgICAgICBvbmNlOiB0cnVl CiAgICAgICAgICAgICAgICBvbkFmZmVjdGVkOiB3b3Jrc0VtaXR0ZXIuYnVyc3QoMTAwMCx4LHkpCiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgLy8hIFsyXQogICAgICAgIAogICAgICAgIFRpbWVyIHsKICAgI CAgICAgICAgaW50ZXJ2YWw6IDMwMDAKICAgICAgICAgICAgcnVubmluZzogdHJ1ZQogICAgICAgICAgICB0cmlnZ2VyZWRPblN0YXJ0OiB0cnVlCiAgICAgICAgICAgIHJlcGVhdDogdHJ1ZQogICAgICAgICAgICBvblRyaW dnZXJlZDpzdGFydGluZ0VtaXR0ZXIucHVsc2UoMTAwKTsKICAgICAgICB9CiAgICAgICAgRW1pdHRlciB7CiAgICAgICAgICAgIGlkOiBzdGFydGluZ0VtaXR0ZXIKICAgICAgICAgICAgZ3JvdXA6ICJmaXJlIgogICAgICA gICAgICB3aWR0aDogcGFyZW50LndpZHRoCiAgICAgICAgICAgIHk6IHBhcmVudC5oZWlnaHQKICAgICAgICAgICAgZW5hYmxlZDogZmFsc2UKICAgICAgICAgICAgZW1pdFJhdGU6IDgwCiAgICAgICAgICAgIGxpZmVTcGFu OiA2MDAwCiAgICAgICAgICAgIHZlbG9jaXR5OiBQb2ludERpcmVjdGlvbiB7eTotMjAwO30KICAgICAgICAgICAgc2l6ZTogMzIKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgRW1pdHRlciB7CiAgICAgICAgICAgIGlkO iB3b3Jrc0VtaXR0ZXIKICAgICAgICAgICAgZ3JvdXA6ICJ3b3JrcyIKICAgICAgICAgICAgZW5hYmxlZDogZmFsc2UKICAgICAgICAgICAgZW1pdFJhdGU6IDEwMAogICAgICAgICAgICBsaWZlU3BhbjogMTYwMAogICAgIC AgICAgICBtYXhpbXVtRW1pdHRlZDogNjQwMAogICAgICAgICAgICBzaXplOiA4CiAgICAgICAgICAgIHZlbG9jaXR5OiBDdW11bGF0aXZlRGlyZWN0aW9uIHsKICAgICAgICAgICAgICAgIFBvaW50RGlyZWN0aW9uIHt5Oi0 xMDB9CiAgICAgICAgICAgICAgICBBbmdsZURpcmVjdGlvbiB7YW5nbGVWYXJpYXRpb246IDM2MDsgbWFnbml0dWRlVmFyaWF0aW9uOiA4MDt9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgYWNjZWxlcmF0aW9uOiBQb2lu dERpcmVjdGlvbiB7eToxMDA7IHlWYXJpYXRpb246IDIwfQogICAgICAgIH0KICAgICAgICAKICAgICAgICBJbWFnZVBhcnRpY2xlIHsKICAgICAgICAgICAgZ3JvdXBzOiBbIndvcmtzIiwgImZpcmUiLCAic3Bsb2RlIl0KI CAgICAgICAgICAgc291cmNlOiAicXJjOi8vL3BhcnRpY2xlcmVzb3VyY2VzL2dsb3dkb3QucG5nIgogICAgICAgICAgICBlbnRyeUVmZmVjdDogSW1hZ2VQYXJ0aWNsZS5TY2FsZQogICAgICAgICAgICBjb2xvclZhcmlhdG lvbjogMC4xCiAgICAgICAgfQogICAgfQp9Cg==
首页 1 2 下一页