- html - 我的下拉菜单的内容关闭得太快
- c# - 使用 Html Agility Pack 从网页中的表中获取值而不使用 "SelectNode'
- html - 内容容器下的 CSS 下拉菜单
- html - 如何停止嵌套列表重叠父列表?
当使用 c++
或 -O0
编译时,以下 -O1
程序给出了数值不同的结果。
#include <iostream>
#include <array>
#include <cmath>
#include <iomanip>
int main()
{
std::array<double, 2> v;
v.fill(0);
std::get<0>(v) = 0x1.5b4d3afe1f7d2p-1;
double theta = 0x1.1aef12f82caf9p+2;
double c = std::cos(theta);
double s = std::sin(theta);
double vi = c * std::get<0>(v) - s * std::get<1>(v);
double vj = s * std::get<0>(v) + c * std::get<1>(v);
std::get<0>(v) = vi;
std::get<1>(v) = vj;
std::cout << std::hexfloat;
for (const auto& x : v)
std::cout << x << " ";
std::cout << std::endl;
return 0;
}
gcc
9.2.0。我使用
std::hexfloat
来确保以全精度打印出
double
变量。
g++ -std=c++17 -Wall -pedantic -O0 -o test test.cpp
-0x1.8f4e436eb5371p-3 -0x1.4ca54aa5d4e1ep-1
With
g++ -std=c++17 -Wall -pedantic -O1 -o test test.cpp
-0x1.8f4e436eb5372p-3 -0x1.4ca54aa5d4e1ep-1
The difference between the optimizations flags enabled by -O0
and -O1
that I can extract with -Q --help=optimizers
are as follows
$ g++ -O0 -Q --help=optimizers >optO0.txt
$ g++ -O1 -Q --help=optimizers >optO1.txt
$ diff optO0.txt optO1.txt|grep ^'>'
> -fbranch-count-reg [enabled]
> -fcombine-stack-adjustments [enabled]
> -fcompare-elim [enabled]
> -fcprop-registers [enabled]
> -fdefer-pop [enabled]
> -fforward-propagate [enabled]
> -fguess-branch-probability [enabled]
> -fif-conversion [enabled]
> -fif-conversion2 [enabled]
> -finline-functions-called-once [enabled]
> -fipa-profile [enabled]
> -fipa-pure-const [enabled]
> -fipa-reference [enabled]
> -fipa-reference-addressable [enabled]
> -fmove-loop-invariants [enabled]
> -fomit-frame-pointer [enabled]
> -freorder-blocks [enabled]
> -fshrink-wrap [enabled]
> -fsplit-wide-types [enabled]
> -fssa-phiopt [enabled]
> -ftree-bit-ccp [enabled]
> -ftree-builtin-call-dce [enabled]
> -ftree-ccp [enabled]
> -ftree-ch [enabled]
> -ftree-coalesce-vars [enabled]
> -ftree-copy-prop [enabled]
> -ftree-dce [enabled]
> -ftree-dominator-opts [enabled]
> -ftree-dse [enabled]
> -ftree-fre [enabled]
> -ftree-pta [enabled]
> -ftree-sink [enabled]
> -ftree-slsr [enabled]
> -ftree-sra [enabled]
> -ftree-ter [enabled]
gcc
的手册页,
-O1
没有启用改变浮点数学的优化标志,比如
-ffast-math
,那么为什么输出不同?
-ffloat-store
不会改变结果。
$ ldd --version
ldd (GNU libc) 2.30
glibc 2.30-1
包中安装的。架构是 x86_64。
-O0
案例的汇编程序转储(使用
g++ -std=c++17 -Wall -pedantic -O0 -S -o test test.cpp
获得)
.file "test.cpp"
.text
.section .text._ZStanSt13_Ios_FmtflagsS_,"axG",@progbits,_ZStanSt13_Ios_FmtflagsS_,comdat
.weak _ZStanSt13_Ios_FmtflagsS_
.type _ZStanSt13_Ios_FmtflagsS_, @function
_ZStanSt13_Ios_FmtflagsS_:
.LFB1415:
.cfi_startproc
pushq %rbp
.cfi_def_cfa_offset 16
.cfi_offset 6, -16
movq %rsp, %rbp
.cfi_def_cfa_register 6
movl %edi, -4(%rbp)
movl %esi, -8(%rbp)
movl -4(%rbp), %eax
andl -8(%rbp), %eax
popq %rbp
.cfi_def_cfa 7, 8
ret
.cfi_endproc
.LFE1415:
.size _ZStanSt13_Ios_FmtflagsS_, .-_ZStanSt13_Ios_FmtflagsS_
.section .text._ZStorSt13_Ios_FmtflagsS_,"axG",@progbits,_ZStorSt13_Ios_FmtflagsS_,comdat
.weak _ZStorSt13_Ios_FmtflagsS_
.type _ZStorSt13_Ios_FmtflagsS_, @function
_ZStorSt13_Ios_FmtflagsS_:
.LFB1416:
.cfi_startproc
pushq %rbp
.cfi_def_cfa_offset 16
.cfi_offset 6, -16
movq %rsp, %rbp
.cfi_def_cfa_register 6
movl %edi, -4(%rbp)
movl %esi, -8(%rbp)
movl -4(%rbp), %eax
orl -8(%rbp), %eax
popq %rbp
.cfi_def_cfa 7, 8
ret
.cfi_endproc
.LFE1416:
.size _ZStorSt13_Ios_FmtflagsS_, .-_ZStorSt13_Ios_FmtflagsS_
.section .text._ZStcoSt13_Ios_Fmtflags,"axG",@progbits,_ZStcoSt13_Ios_Fmtflags,comdat
.weak _ZStcoSt13_Ios_Fmtflags
.type _ZStcoSt13_Ios_Fmtflags, @function
_ZStcoSt13_Ios_Fmtflags:
.LFB1418:
.cfi_startproc
pushq %rbp
.cfi_def_cfa_offset 16
.cfi_offset 6, -16
movq %rsp, %rbp
.cfi_def_cfa_register 6
movl %edi, -4(%rbp)
movl -4(%rbp), %eax
notl %eax
popq %rbp
.cfi_def_cfa 7, 8
ret
.cfi_endproc
.LFE1418:
.size _ZStcoSt13_Ios_Fmtflags, .-_ZStcoSt13_Ios_Fmtflags
.section .text._ZStoRRSt13_Ios_FmtflagsS_,"axG",@progbits,_ZStoRRSt13_Ios_FmtflagsS_,comdat
.weak _ZStoRRSt13_Ios_FmtflagsS_
.type _ZStoRRSt13_Ios_FmtflagsS_, @function
_ZStoRRSt13_Ios_FmtflagsS_:
.LFB1419:
.cfi_startproc
pushq %rbp
.cfi_def_cfa_offset 16
.cfi_offset 6, -16
movq %rsp, %rbp
.cfi_def_cfa_register 6
subq $16, %rsp
movq %rdi, -8(%rbp)
movl %esi, -12(%rbp)
movq -8(%rbp), %rax
movl (%rax), %eax
movl -12(%rbp), %edx
movl %edx, %esi
movl %eax, %edi
call _ZStorSt13_Ios_FmtflagsS_
movq -8(%rbp), %rdx
movl %eax, (%rdx)
movq -8(%rbp), %rax
leave
.cfi_def_cfa 7, 8
ret
.cfi_endproc
.LFE1419:
.size _ZStoRRSt13_Ios_FmtflagsS_, .-_ZStoRRSt13_Ios_FmtflagsS_
.section .text._ZStaNRSt13_Ios_FmtflagsS_,"axG",@progbits,_ZStaNRSt13_Ios_FmtflagsS_,comdat
.weak _ZStaNRSt13_Ios_FmtflagsS_
.type _ZStaNRSt13_Ios_FmtflagsS_, @function
_ZStaNRSt13_Ios_FmtflagsS_:
.LFB1420:
.cfi_startproc
pushq %rbp
.cfi_def_cfa_offset 16
.cfi_offset 6, -16
movq %rsp, %rbp
.cfi_def_cfa_register 6
subq $16, %rsp
movq %rdi, -8(%rbp)
movl %esi, -12(%rbp)
movq -8(%rbp), %rax
movl (%rax), %eax
movl -12(%rbp), %edx
movl %edx, %esi
movl %eax, %edi
call _ZStanSt13_Ios_FmtflagsS_
movq -8(%rbp), %rdx
movl %eax, (%rdx)
movq -8(%rbp), %rax
leave
.cfi_def_cfa 7, 8
ret
.cfi_endproc
.LFE1420:
.size _ZStaNRSt13_Ios_FmtflagsS_, .-_ZStaNRSt13_Ios_FmtflagsS_
.section .text._ZNSt8ios_base4setfESt13_Ios_FmtflagsS0_,"axG",@progbits,_ZNSt8ios_base4setfESt13_Ios_FmtflagsS0_,comdat
.align 2
.weak _ZNSt8ios_base4setfESt13_Ios_FmtflagsS0_
.type _ZNSt8ios_base4setfESt13_Ios_FmtflagsS0_, @function
_ZNSt8ios_base4setfESt13_Ios_FmtflagsS0_:
.LFB1449:
.cfi_startproc
pushq %rbp
.cfi_def_cfa_offset 16
.cfi_offset 6, -16
movq %rsp, %rbp
.cfi_def_cfa_register 6
subq $32, %rsp
movq %rdi, -24(%rbp)
movl %esi, -28(%rbp)
movl %edx, -32(%rbp)
movq -24(%rbp), %rax
movl 24(%rax), %eax
movl %eax, -4(%rbp)
movl -32(%rbp), %eax
movl %eax, %edi
call _ZStcoSt13_Ios_Fmtflags
movl %eax, %edx
movq -24(%rbp), %rax
addq $24, %rax
movl %edx, %esi
movq %rax, %rdi
call _ZStaNRSt13_Ios_FmtflagsS_
movl -32(%rbp), %edx
movl -28(%rbp), %eax
movl %edx, %esi
movl %eax, %edi
call _ZStanSt13_Ios_FmtflagsS_
movl %eax, %edx
movq -24(%rbp), %rax
addq $24, %rax
movl %edx, %esi
movq %rax, %rdi
call _ZStoRRSt13_Ios_FmtflagsS_
movl -4(%rbp), %eax
leave
.cfi_def_cfa 7, 8
ret
.cfi_endproc
.LFE1449:
.size _ZNSt8ios_base4setfESt13_Ios_FmtflagsS0_, .-_ZNSt8ios_base4setfESt13_Ios_FmtflagsS0_
.section .text._ZSt8hexfloatRSt8ios_base,"axG",@progbits,_ZSt8hexfloatRSt8ios_base,comdat
.weak _ZSt8hexfloatRSt8ios_base
.type _ZSt8hexfloatRSt8ios_base, @function
_ZSt8hexfloatRSt8ios_base:
.LFB1481:
.cfi_startproc
pushq %rbp
.cfi_def_cfa_offset 16
.cfi_offset 6, -16
movq %rsp, %rbp
.cfi_def_cfa_register 6
subq $16, %rsp
movq %rdi, -8(%rbp)
movl $256, %esi
movl $4, %edi
call _ZStorSt13_Ios_FmtflagsS_
movl %eax, %ecx
movq -8(%rbp), %rax
movl $260, %edx
movl %ecx, %esi
movq %rax, %rdi
call _ZNSt8ios_base4setfESt13_Ios_FmtflagsS0_
movq -8(%rbp), %rax
leave
.cfi_def_cfa 7, 8
ret
.cfi_endproc
.LFE1481:
.size _ZSt8hexfloatRSt8ios_base, .-_ZSt8hexfloatRSt8ios_base
.local _ZStL8__ioinit
.comm _ZStL8__ioinit,1,1
.section .rodata
.LC3:
.string " "
.text
.globl main
.type main, @function
main:
.LFB2816:
.cfi_startproc
pushq %rbp
.cfi_def_cfa_offset 16
.cfi_offset 6, -16
movq %rsp, %rbp
.cfi_def_cfa_register 6
addq $-128, %rsp
movq %fs:40, %rax
movq %rax, -8(%rbp)
xorl %eax, %eax
pxor %xmm0, %xmm0
movsd %xmm0, -112(%rbp)
leaq -112(%rbp), %rdx
leaq -32(%rbp), %rax
movq %rdx, %rsi
movq %rax, %rdi
call _ZNSt5arrayIdLm2EE4fillERKd
leaq -32(%rbp), %rax
movq %rax, %rdi
call _ZSt3getILm0EdLm2EERT0_RSt5arrayIS0_XT1_EE
movsd .LC1(%rip), %xmm0
movsd %xmm0, (%rax)
movsd .LC2(%rip), %xmm0
movsd %xmm0, -96(%rbp)
movq -96(%rbp), %rax
movq %rax, %xmm0
call cos@PLT
movq %xmm0, %rax
movq %rax, -88(%rbp)
movq -96(%rbp), %rax
movq %rax, %xmm0
call sin@PLT
movq %xmm0, %rax
movq %rax, -80(%rbp)
leaq -32(%rbp), %rax
movq %rax, %rdi
call _ZSt3getILm0EdLm2EERT0_RSt5arrayIS0_XT1_EE
movsd (%rax), %xmm0
mulsd -88(%rbp), %xmm0
movsd %xmm0, -120(%rbp)
leaq -32(%rbp), %rax
movq %rax, %rdi
call _ZSt3getILm1EdLm2EERT0_RSt5arrayIS0_XT1_EE
movsd (%rax), %xmm0
mulsd -80(%rbp), %xmm0
movsd -120(%rbp), %xmm1
subsd %xmm0, %xmm1
movapd %xmm1, %xmm0
movsd %xmm0, -72(%rbp)
leaq -32(%rbp), %rax
movq %rax, %rdi
call _ZSt3getILm0EdLm2EERT0_RSt5arrayIS0_XT1_EE
movsd (%rax), %xmm0
mulsd -80(%rbp), %xmm0
movsd %xmm0, -120(%rbp)
leaq -32(%rbp), %rax
movq %rax, %rdi
call _ZSt3getILm1EdLm2EERT0_RSt5arrayIS0_XT1_EE
movsd (%rax), %xmm0
mulsd -88(%rbp), %xmm0
addsd -120(%rbp), %xmm0
movsd %xmm0, -64(%rbp)
movsd -72(%rbp), %xmm3
movsd %xmm3, -120(%rbp)
leaq -32(%rbp), %rax
movq %rax, %rdi
call _ZSt3getILm0EdLm2EERT0_RSt5arrayIS0_XT1_EE
movsd -120(%rbp), %xmm3
movsd %xmm3, (%rax)
movsd -64(%rbp), %xmm4
movsd %xmm4, -120(%rbp)
leaq -32(%rbp), %rax
movq %rax, %rdi
call _ZSt3getILm1EdLm2EERT0_RSt5arrayIS0_XT1_EE
movsd -120(%rbp), %xmm4
movsd %xmm4, (%rax)
leaq _ZSt8hexfloatRSt8ios_base(%rip), %rsi
leaq _ZSt4cout(%rip), %rdi
call _ZNSolsEPFRSt8ios_baseS0_E@PLT
leaq -32(%rbp), %rax
movq %rax, -56(%rbp)
movq -56(%rbp), %rax
movq %rax, %rdi
call _ZNSt5arrayIdLm2EE5beginEv
movq %rax, -104(%rbp)
movq -56(%rbp), %rax
movq %rax, %rdi
call _ZNSt5arrayIdLm2EE3endEv
movq %rax, -48(%rbp)
.L17:
movq -104(%rbp), %rax
cmpq -48(%rbp), %rax
je .L16
movq -104(%rbp), %rax
movq %rax, -40(%rbp)
movq -40(%rbp), %rax
movq (%rax), %rax
movq %rax, %xmm0
leaq _ZSt4cout(%rip), %rdi
call _ZNSolsEd@PLT
leaq .LC3(%rip), %rsi
movq %rax, %rdi
call _ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc@PLT
addq $8, -104(%rbp)
jmp .L17
.L16:
movq _ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_@GOTPCREL(%rip), %rax
movq %rax, %rsi
leaq _ZSt4cout(%rip), %rdi
call _ZNSolsEPFRSoS_E@PLT
movl $0, %eax
movq -8(%rbp), %rcx
xorq %fs:40, %rcx
je .L19
call __stack_chk_fail@PLT
.L19:
leave
.cfi_def_cfa 7, 8
ret
.cfi_endproc
.LFE2816:
.size main, .-main
.section .text._ZNSt5arrayIdLm2EE4fillERKd,"axG",@progbits,_ZNSt5arrayIdLm2EE4fillERKd,comdat
.align 2
.weak _ZNSt5arrayIdLm2EE4fillERKd
.type _ZNSt5arrayIdLm2EE4fillERKd, @function
_ZNSt5arrayIdLm2EE4fillERKd:
.LFB3128:
.cfi_startproc
pushq %rbp
.cfi_def_cfa_offset 16
.cfi_offset 6, -16
movq %rsp, %rbp
.cfi_def_cfa_register 6
pushq %rbx
subq $24, %rsp
.cfi_offset 3, -24
movq %rdi, -24(%rbp)
movq %rsi, -32(%rbp)
movq -24(%rbp), %rax
movq %rax, %rdi
call _ZNKSt5arrayIdLm2EE4sizeEv
movq %rax, %rbx
movq -24(%rbp), %rax
movq %rax, %rdi
call _ZNSt5arrayIdLm2EE5beginEv
movq %rax, %rcx
movq -32(%rbp), %rax
movq %rax, %rdx
movq %rbx, %rsi
movq %rcx, %rdi
call _ZSt6fill_nIPdmdET_S1_T0_RKT1_
nop
addq $24, %rsp
popq %rbx
popq %rbp
.cfi_def_cfa 7, 8
ret
.cfi_endproc
.LFE3128:
.size _ZNSt5arrayIdLm2EE4fillERKd, .-_ZNSt5arrayIdLm2EE4fillERKd
.section .text._ZSt3getILm0EdLm2EERT0_RSt5arrayIS0_XT1_EE,"axG",@progbits,_ZSt3getILm0EdLm2EERT0_RSt5arrayIS0_XT1_EE,comdat
.weak _ZSt3getILm0EdLm2EERT0_RSt5arrayIS0_XT1_EE
.type _ZSt3getILm0EdLm2EERT0_RSt5arrayIS0_XT1_EE, @function
_ZSt3getILm0EdLm2EERT0_RSt5arrayIS0_XT1_EE:
.LFB3129:
.cfi_startproc
pushq %rbp
.cfi_def_cfa_offset 16
.cfi_offset 6, -16
movq %rsp, %rbp
.cfi_def_cfa_register 6
subq $16, %rsp
movq %rdi, -8(%rbp)
movq -8(%rbp), %rax
movl $0, %esi
movq %rax, %rdi
call _ZNSt14__array_traitsIdLm2EE6_S_refERA2_Kdm
leave
.cfi_def_cfa 7, 8
ret
.cfi_endproc
.LFE3129:
.size _ZSt3getILm0EdLm2EERT0_RSt5arrayIS0_XT1_EE, .-_ZSt3getILm0EdLm2EERT0_RSt5arrayIS0_XT1_EE
.section .text._ZSt3getILm1EdLm2EERT0_RSt5arrayIS0_XT1_EE,"axG",@progbits,_ZSt3getILm1EdLm2EERT0_RSt5arrayIS0_XT1_EE,comdat
.weak _ZSt3getILm1EdLm2EERT0_RSt5arrayIS0_XT1_EE
.type _ZSt3getILm1EdLm2EERT0_RSt5arrayIS0_XT1_EE, @function
_ZSt3getILm1EdLm2EERT0_RSt5arrayIS0_XT1_EE:
.LFB3130:
.cfi_startproc
pushq %rbp
.cfi_def_cfa_offset 16
.cfi_offset 6, -16
movq %rsp, %rbp
.cfi_def_cfa_register 6
subq $16, %rsp
movq %rdi, -8(%rbp)
movq -8(%rbp), %rax
movl $1, %esi
movq %rax, %rdi
call _ZNSt14__array_traitsIdLm2EE6_S_refERA2_Kdm
leave
.cfi_def_cfa 7, 8
ret
.cfi_endproc
.LFE3130:
.size _ZSt3getILm1EdLm2EERT0_RSt5arrayIS0_XT1_EE, .-_ZSt3getILm1EdLm2EERT0_RSt5arrayIS0_XT1_EE
.section .text._ZNSt5arrayIdLm2EE5beginEv,"axG",@progbits,_ZNSt5arrayIdLm2EE5beginEv,comdat
.align 2
.weak _ZNSt5arrayIdLm2EE5beginEv
.type _ZNSt5arrayIdLm2EE5beginEv, @function
_ZNSt5arrayIdLm2EE5beginEv:
.LFB3132:
.cfi_startproc
pushq %rbp
.cfi_def_cfa_offset 16
.cfi_offset 6, -16
movq %rsp, %rbp
.cfi_def_cfa_register 6
subq $16, %rsp
movq %rdi, -8(%rbp)
movq -8(%rbp), %rax
movq %rax, %rdi
call _ZNSt5arrayIdLm2EE4dataEv
leave
.cfi_def_cfa 7, 8
ret
.cfi_endproc
.LFE3132:
.size _ZNSt5arrayIdLm2EE5beginEv, .-_ZNSt5arrayIdLm2EE5beginEv
.section .text._ZNSt5arrayIdLm2EE3endEv,"axG",@progbits,_ZNSt5arrayIdLm2EE3endEv,comdat
.align 2
.weak _ZNSt5arrayIdLm2EE3endEv
.type _ZNSt5arrayIdLm2EE3endEv, @function
_ZNSt5arrayIdLm2EE3endEv:
.LFB3133:
.cfi_startproc
pushq %rbp
.cfi_def_cfa_offset 16
.cfi_offset 6, -16
movq %rsp, %rbp
.cfi_def_cfa_register 6
subq $16, %rsp
movq %rdi, -8(%rbp)
movq -8(%rbp), %rax
movq %rax, %rdi
call _ZNSt5arrayIdLm2EE4dataEv
addq $16, %rax
leave
.cfi_def_cfa 7, 8
ret
.cfi_endproc
.LFE3133:
.size _ZNSt5arrayIdLm2EE3endEv, .-_ZNSt5arrayIdLm2EE3endEv
.section .text._ZNKSt5arrayIdLm2EE4sizeEv,"axG",@progbits,_ZNKSt5arrayIdLm2EE4sizeEv,comdat
.align 2
.weak _ZNKSt5arrayIdLm2EE4sizeEv
.type _ZNKSt5arrayIdLm2EE4sizeEv, @function
_ZNKSt5arrayIdLm2EE4sizeEv:
.LFB3247:
.cfi_startproc
pushq %rbp
.cfi_def_cfa_offset 16
.cfi_offset 6, -16
movq %rsp, %rbp
.cfi_def_cfa_register 6
movq %rdi, -8(%rbp)
movl $2, %eax
popq %rbp
.cfi_def_cfa 7, 8
ret
.cfi_endproc
.LFE3247:
.size _ZNKSt5arrayIdLm2EE4sizeEv, .-_ZNKSt5arrayIdLm2EE4sizeEv
.section .text._ZSt6fill_nIPdmdET_S1_T0_RKT1_,"axG",@progbits,_ZSt6fill_nIPdmdET_S1_T0_RKT1_,comdat
.weak _ZSt6fill_nIPdmdET_S1_T0_RKT1_
.type _ZSt6fill_nIPdmdET_S1_T0_RKT1_, @function
_ZSt6fill_nIPdmdET_S1_T0_RKT1_:
.LFB3248:
.cfi_startproc
pushq %rbp
.cfi_def_cfa_offset 16
.cfi_offset 6, -16
movq %rsp, %rbp
.cfi_def_cfa_register 6
subq $32, %rsp
movq %rdi, -8(%rbp)
movq %rsi, -16(%rbp)
movq %rdx, -24(%rbp)
movq -8(%rbp), %rax
movq %rax, %rdi
call _ZSt12__niter_baseIPdET_S1_
movq %rax, %rcx
movq -24(%rbp), %rdx
movq -16(%rbp), %rax
movq %rax, %rsi
movq %rcx, %rdi
call _ZSt10__fill_n_aIPdmdEN9__gnu_cxx11__enable_ifIXsrSt11__is_scalarIT1_E7__valueET_E6__typeES6_T0_RKS4_
movq %rax, %rdx
leaq -8(%rbp), %rax
movq %rdx, %rsi
movq %rax, %rdi
call _ZSt12__niter_wrapIPdET_RKS1_S1_
leave
.cfi_def_cfa 7, 8
ret
.cfi_endproc
.LFE3248:
.size _ZSt6fill_nIPdmdET_S1_T0_RKT1_, .-_ZSt6fill_nIPdmdET_S1_T0_RKT1_
.section .text._ZNSt14__array_traitsIdLm2EE6_S_refERA2_Kdm,"axG",@progbits,_ZNSt14__array_traitsIdLm2EE6_S_refERA2_Kdm,comdat
.weak _ZNSt14__array_traitsIdLm2EE6_S_refERA2_Kdm
.type _ZNSt14__array_traitsIdLm2EE6_S_refERA2_Kdm, @function
_ZNSt14__array_traitsIdLm2EE6_S_refERA2_Kdm:
.LFB3249:
.cfi_startproc
pushq %rbp
.cfi_def_cfa_offset 16
.cfi_offset 6, -16
movq %rsp, %rbp
.cfi_def_cfa_register 6
movq %rdi, -8(%rbp)
movq %rsi, -16(%rbp)
movq -16(%rbp), %rax
leaq 0(,%rax,8), %rdx
movq -8(%rbp), %rax
addq %rdx, %rax
popq %rbp
.cfi_def_cfa 7, 8
ret
.cfi_endproc
.LFE3249:
.size _ZNSt14__array_traitsIdLm2EE6_S_refERA2_Kdm, .-_ZNSt14__array_traitsIdLm2EE6_S_refERA2_Kdm
.section .text._ZNSt5arrayIdLm2EE4dataEv,"axG",@progbits,_ZNSt5arrayIdLm2EE4dataEv,comdat
.align 2
.weak _ZNSt5arrayIdLm2EE4dataEv
.type _ZNSt5arrayIdLm2EE4dataEv, @function
_ZNSt5arrayIdLm2EE4dataEv:
.LFB3250:
.cfi_startproc
pushq %rbp
.cfi_def_cfa_offset 16
.cfi_offset 6, -16
movq %rsp, %rbp
.cfi_def_cfa_register 6
subq $16, %rsp
movq %rdi, -8(%rbp)
movq -8(%rbp), %rax
movq %rax, %rdi
call _ZNSt14__array_traitsIdLm2EE6_S_ptrERA2_Kd
leave
.cfi_def_cfa 7, 8
ret
.cfi_endproc
.LFE3250:
.size _ZNSt5arrayIdLm2EE4dataEv, .-_ZNSt5arrayIdLm2EE4dataEv
.section .text._ZSt12__niter_baseIPdET_S1_,"axG",@progbits,_ZSt12__niter_baseIPdET_S1_,comdat
.weak _ZSt12__niter_baseIPdET_S1_
.type _ZSt12__niter_baseIPdET_S1_, @function
_ZSt12__niter_baseIPdET_S1_:
.LFB3318:
.cfi_startproc
pushq %rbp
.cfi_def_cfa_offset 16
.cfi_offset 6, -16
movq %rsp, %rbp
.cfi_def_cfa_register 6
movq %rdi, -8(%rbp)
movq -8(%rbp), %rax
popq %rbp
.cfi_def_cfa 7, 8
ret
.cfi_endproc
.LFE3318:
.size _ZSt12__niter_baseIPdET_S1_, .-_ZSt12__niter_baseIPdET_S1_
.section .text._ZSt10__fill_n_aIPdmdEN9__gnu_cxx11__enable_ifIXsrSt11__is_scalarIT1_E7__valueET_E6__typeES6_T0_RKS4_,"axG",@progbits,_ZSt10__fill_n_aIPdmdEN9__gnu_cxx11__enable_ifIXsrSt11__is_scalarIT1_E7__valueET_E6__typeES6_T0_RKS4_,comdat
.weak _ZSt10__fill_n_aIPdmdEN9__gnu_cxx11__enable_ifIXsrSt11__is_scalarIT1_E7__valueET_E6__typeES6_T0_RKS4_
.type _ZSt10__fill_n_aIPdmdEN9__gnu_cxx11__enable_ifIXsrSt11__is_scalarIT1_E7__valueET_E6__typeES6_T0_RKS4_, @function
_ZSt10__fill_n_aIPdmdEN9__gnu_cxx11__enable_ifIXsrSt11__is_scalarIT1_E7__valueET_E6__typeES6_T0_RKS4_:
.LFB3319:
.cfi_startproc
pushq %rbp
.cfi_def_cfa_offset 16
.cfi_offset 6, -16
movq %rsp, %rbp
.cfi_def_cfa_register 6
movq %rdi, -24(%rbp)
movq %rsi, -32(%rbp)
movq %rdx, -40(%rbp)
movq -40(%rbp), %rax
movsd (%rax), %xmm0
movsd %xmm0, -8(%rbp)
movq -32(%rbp), %rax
movq %rax, -16(%rbp)
.L41:
cmpq $0, -16(%rbp)
je .L40
movq -24(%rbp), %rax
movsd -8(%rbp), %xmm0
movsd %xmm0, (%rax)
subq $1, -16(%rbp)
addq $8, -24(%rbp)
jmp .L41
.L40:
movq -24(%rbp), %rax
popq %rbp
.cfi_def_cfa 7, 8
ret
.cfi_endproc
.LFE3319:
.size _ZSt10__fill_n_aIPdmdEN9__gnu_cxx11__enable_ifIXsrSt11__is_scalarIT1_E7__valueET_E6__typeES6_T0_RKS4_, .-_ZSt10__fill_n_aIPdmdEN9__gnu_cxx11__enable_ifIXsrSt11__is_scalarIT1_E7__valueET_E6__typeES6_T0_RKS4_
.section .text._ZSt12__niter_wrapIPdET_RKS1_S1_,"axG",@progbits,_ZSt12__niter_wrapIPdET_RKS1_S1_,comdat
.weak _ZSt12__niter_wrapIPdET_RKS1_S1_
.type _ZSt12__niter_wrapIPdET_RKS1_S1_, @function
_ZSt12__niter_wrapIPdET_RKS1_S1_:
.LFB3320:
.cfi_startproc
pushq %rbp
.cfi_def_cfa_offset 16
.cfi_offset 6, -16
movq %rsp, %rbp
.cfi_def_cfa_register 6
movq %rdi, -8(%rbp)
movq %rsi, -16(%rbp)
movq -16(%rbp), %rax
popq %rbp
.cfi_def_cfa 7, 8
ret
.cfi_endproc
.LFE3320:
.size _ZSt12__niter_wrapIPdET_RKS1_S1_, .-_ZSt12__niter_wrapIPdET_RKS1_S1_
.section .text._ZNSt14__array_traitsIdLm2EE6_S_ptrERA2_Kd,"axG",@progbits,_ZNSt14__array_traitsIdLm2EE6_S_ptrERA2_Kd,comdat
.weak _ZNSt14__array_traitsIdLm2EE6_S_ptrERA2_Kd
.type _ZNSt14__array_traitsIdLm2EE6_S_ptrERA2_Kd, @function
_ZNSt14__array_traitsIdLm2EE6_S_ptrERA2_Kd:
.LFB3321:
.cfi_startproc
pushq %rbp
.cfi_def_cfa_offset 16
.cfi_offset 6, -16
movq %rsp, %rbp
.cfi_def_cfa_register 6
movq %rdi, -8(%rbp)
movq -8(%rbp), %rax
popq %rbp
.cfi_def_cfa 7, 8
ret
.cfi_endproc
.LFE3321:
.size _ZNSt14__array_traitsIdLm2EE6_S_ptrERA2_Kd, .-_ZNSt14__array_traitsIdLm2EE6_S_ptrERA2_Kd
.text
.type _Z41__static_initialization_and_destruction_0ii, @function
_Z41__static_initialization_and_destruction_0ii:
.LFB3455:
.cfi_startproc
pushq %rbp
.cfi_def_cfa_offset 16
.cfi_offset 6, -16
movq %rsp, %rbp
.cfi_def_cfa_register 6
subq $16, %rsp
movl %edi, -4(%rbp)
movl %esi, -8(%rbp)
cmpl $1, -4(%rbp)
jne .L49
cmpl $65535, -8(%rbp)
jne .L49
leaq _ZStL8__ioinit(%rip), %rdi
call _ZNSt8ios_base4InitC1Ev@PLT
leaq __dso_handle(%rip), %rdx
leaq _ZStL8__ioinit(%rip), %rsi
movq _ZNSt8ios_base4InitD1Ev@GOTPCREL(%rip), %rax
movq %rax, %rdi
call __cxa_atexit@PLT
.L49:
nop
leave
.cfi_def_cfa 7, 8
ret
.cfi_endproc
.LFE3455:
.size _Z41__static_initialization_and_destruction_0ii, .-_Z41__static_initialization_and_destruction_0ii
.type _GLOBAL__sub_I_main, @function
_GLOBAL__sub_I_main:
.LFB3456:
.cfi_startproc
pushq %rbp
.cfi_def_cfa_offset 16
.cfi_offset 6, -16
movq %rsp, %rbp
.cfi_def_cfa_register 6
movl $65535, %esi
movl $1, %edi
call _Z41__static_initialization_and_destruction_0ii
popq %rbp
.cfi_def_cfa 7, 8
ret
.cfi_endproc
.LFE3456:
.size _GLOBAL__sub_I_main, .-_GLOBAL__sub_I_main
.section .init_array,"aw"
.align 8
.quad _GLOBAL__sub_I_main
.section .rodata
.align 8
.LC1:
.long 2950821842
.long 1072018643
.align 8
.LC2:
.long 797100793
.long 1074900721
.hidden __dso_handle
.ident "GCC: (GNU) 9.2.0"
.section .note.GNU-stack,"",@progbits
-O1
(
g++ -std=c++17 -Wall -pedantic -O1 -S -o test test.cpp
) 时的汇编程序转储是
.file "test.cpp"
.text
.section .rodata.str1.1,"aMS",@progbits,1
.LC1:
.string " "
.text
.globl main
.type main, @function
main:
.LFB2853:
.cfi_startproc
pushq %rbx
.cfi_def_cfa_offset 16
.cfi_offset 3, -16
leaq _ZSt4cout(%rip), %rbx
movq _ZSt4cout(%rip), %rax
movq %rbx, %rcx
addq -24(%rax), %rcx
orl $260, 24(%rcx)
movsd .LC0(%rip), %xmm0
movq %rbx, %rdi
call _ZNSo9_M_insertIdEERSoT_@PLT
movq %rax, %rdi
movl $1, %edx
leaq .LC1(%rip), %rsi
call _ZSt16__ostream_insertIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_PKS3_l@PLT
movsd .LC2(%rip), %xmm0
movq %rbx, %rdi
call _ZNSo9_M_insertIdEERSoT_@PLT
movq %rax, %rdi
movl $1, %edx
leaq .LC1(%rip), %rsi
call _ZSt16__ostream_insertIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_PKS3_l@PLT
movq %rbx, %rdi
call _ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_@PLT
movl $0, %eax
popq %rbx
.cfi_def_cfa_offset 8
ret
.cfi_endproc
.LFE2853:
.size main, .-main
.type _GLOBAL__sub_I_main, @function
_GLOBAL__sub_I_main:
.LFB3477:
.cfi_startproc
subq $8, %rsp
.cfi_def_cfa_offset 16
leaq _ZStL8__ioinit(%rip), %rdi
call _ZNSt8ios_base4InitC1Ev@PLT
leaq __dso_handle(%rip), %rdx
leaq _ZStL8__ioinit(%rip), %rsi
movq _ZNSt8ios_base4InitD1Ev@GOTPCREL(%rip), %rdi
call __cxa_atexit@PLT
addq $8, %rsp
.cfi_def_cfa_offset 8
ret
.cfi_endproc
.LFE3477:
.size _GLOBAL__sub_I_main, .-_GLOBAL__sub_I_main
.section .init_array,"aw"
.align 8
.quad _GLOBAL__sub_I_main
.local _ZStL8__ioinit
.comm _ZStL8__ioinit,1,1
.section .rodata.cst8,"aM",@progbits,8
.align 8
.LC0:
.long 921391986
.long -1077349148
.align 8
.LC2:
.long 2858241566
.long -1075525036
.hidden __dso_handle
.ident "GCC: (GNU) 9.2.0"
.section .note.GNU-stack,"",@progbits
objdump -d
编译的可执行文件上的
-O0
here(由于长度限制,我无法在此处发布)。
ldd
的输出表明可执行文件再次链接到
/usr/lib/libm.so.6
。
objdump -d /bin/libm.so.6
输出的一部分(.init、.plt、sin 和 cos 节)在
here 中找到。
最佳答案
与 -O1
, float 计算发生在编译时,使用 GNU MPFR library .即使对于 sin
等函数,MPFR 也有望给出正确舍入的结果。和 cos
.您的数学库可能对这些函数有不同的精度目标,这就是为什么运行时计算(在 -O0
优化级别)有时会给出不同的结果。例如,GNU C library has a general accuracy goal of a few ulp .
据报道,IEEE 754 仅对数学库函数的一个子集(显然是 sqrt
)有精度要求,这使得数学库能够在超越函数的速度和精度之间选择不同的权衡。 (不幸的是,我无法访问 IEEE 754,因为 IEEE 反对知识的公开传播。)
关于c++ - -O1 改变 float 学,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58556044/
#include using namespace std; class C{ private: int value; public: C(){ value = 0;
这个问题已经有答案了: What is the difference between char a[] = ?string?; and char *p = ?string?;? (8 个回答) 已关闭
关闭。此题需要details or clarity 。目前不接受答案。 想要改进这个问题吗?通过 editing this post 添加详细信息并澄清问题. 已关闭 7 年前。 此帖子已于 8 个月
除了调试之外,是否有任何针对 c、c++ 或 c# 的测试工具,其工作原理类似于将独立函数复制粘贴到某个文本框,然后在其他文本框中输入参数? 最佳答案 也许您会考虑单元测试。我推荐你谷歌测试和谷歌模拟
我想在第二台显示器中移动一个窗口 (HWND)。问题是我尝试了很多方法,例如将分辨率加倍或输入负值,但它永远无法将窗口放在我的第二台显示器上。 关于如何在 C/C++/c# 中执行此操作的任何线索 最
我正在寻找 C/C++/C## 中不同类型 DES 的现有实现。我的运行平台是Windows XP/Vista/7。 我正在尝试编写一个 C# 程序,它将使用 DES 算法进行加密和解密。我需要一些实
很难说出这里要问什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或夸夸其谈,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开,visit the help center . 关闭 1
有没有办法强制将另一个 窗口置于顶部? 不是应用程序的窗口,而是另一个已经在系统上运行的窗口。 (Windows, C/C++/C#) 最佳答案 SetWindowPos(that_window_ha
假设您可以在 C/C++ 或 Csharp 之间做出选择,并且您打算在 Windows 和 Linux 服务器上运行同一服务器的多个实例,那么构建套接字服务器应用程序的最明智选择是什么? 最佳答案 如
你们能告诉我它们之间的区别吗? 顺便问一下,有什么叫C++库或C库的吗? 最佳答案 C++ 标准库 和 C 标准库 是 C++ 和 C 标准定义的库,提供给 C++ 和 C 程序使用。那是那些词的共同
下面的测试代码,我将输出信息放在注释中。我使用的是 gcc 4.8.5 和 Centos 7.2。 #include #include class C { public:
很难说出这里问的是什么。这个问题是含糊的、模糊的、不完整的、过于宽泛的或修辞性的,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开它,visit the help center 。 已关
我的客户将使用名为 annoucement 的结构/类与客户通信。我想我会用 C++ 编写服务器。会有很多不同的类继承annoucement。我的问题是通过网络将这些类发送给客户端 我想也许我应该使用
我在 C# 中有以下函数: public Matrix ConcatDescriptors(IList> descriptors) { int cols = descriptors[0].Co
我有一个项目要编写一个函数来对某些数据执行某些操作。我可以用 C/C++ 编写代码,但我不想与雇主共享该函数的代码。相反,我只想让他有权在他自己的代码中调用该函数。是否可以?我想到了这两种方法 - 在
我使用的是编写糟糕的第 3 方 (C/C++) Api。我从托管代码(C++/CLI)中使用它。有时会出现“访问冲突错误”。这使整个应用程序崩溃。我知道我无法处理这些错误[如果指针访问非法内存位置等,
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。 关闭 7 年前。
已关闭。此问题不符合Stack Overflow guidelines 。目前不接受答案。 要求我们推荐或查找工具、库或最喜欢的场外资源的问题对于 Stack Overflow 来说是偏离主题的,因为
我有一些 C 代码,将使用 P/Invoke 从 C# 调用。我正在尝试为这个 C 函数定义一个 C# 等效项。 SomeData* DoSomething(); struct SomeData {
这个问题已经有答案了: Why are these constructs using pre and post-increment undefined behavior? (14 个回答) 已关闭 6
我是一名优秀的程序员,十分优秀!