小编use*_*031的帖子

为什么调用 snprintf() 这么慢?

我们的内部程序是用 C 编写的,并广泛使用了snprintf()许多部分,我注意到在使用性能记录/报告进行调试期间,它在以下方面花费了大量时间:

\n
       \xe2\x94\x82      _IO_vfprintf_internal():                                                                                                                                                                                             \xe2\x96\x92\n       \xe2\x94\x82        mov    -0x510(%rbp),%rdx                                                                                                                                                                                           \xe2\x96\x92\n       \xe2\x94\x82        mov    %r12,%rsi                                                                                                                                                                                                   \xe2\x96\x92\n       \xe2\x94\x82        mov    %r15,%rdi                                                                                                                                                                                                   \xe2\x96\x92\n       \xe2\x94\x82      \xe2\x86\x92 callq  *0x38(%rax)                                                                                                                                                                                                 \xe2\x96\x92\n       \xe2\x94\x82        cmp    %rax,-0x510(%rbp)                                                                                                                                                                                           \xe2\x96\x92\n       \xe2\x94\x82        mov    -0x530(%rbp),%r9                                                                                                                                                                                            \xe2\x96\x92\n       \xe2\x94\x82      \xe2\x86\x91 jne    91a                                                                                                                                                                                                         \xe2\x96\x92\n       \xe2\x94\x82        mov    -0x4d0(%rbp),%esi                                                                                                                                                                                           \xe2\x96\x92\n       \xe2\x94\x82        mov    -0x540(%rbp),%ecx                                                                                                                                                                                           \xe2\x96\x92\n       \xe2\x94\x82        mov    $0x7fffffff,%eax                                                                                                                                                                                            \xe2\x96\x92\n       \xe2\x94\x82        sub    %esi,%eax                                                                                                                                                                                                   \xe2\x96\x92\n       \xe2\x94\x82        add    %esi,%ecx                                                                                                                                                                                                   \xe2\x96\x92\n       \xe2\x94\x82        cltq                                                                                                                                                                                                               \xe2\x96\x92\n       \xe2\x94\x82        cmp    %rax,-0x510(%rbp)                                                                                                                                                                                           \xe2\x96\x92\n       \xe2\x94\x82      \xe2\x86\x91 jbe    252b                                                                                                                                                                                                        \xe2\x96\x92\n       \xe2\x94\x82      \xe2\x86\x91 jmpq   28f0                                                                                                                                                                                                        \xe2\x96\x92\n       \xe2\x94\x824a70:   xor    %eax,%eax                                                                                                                                                                                                   \xe2\x96\x92\n …
Run Code Online (Sandbox Code Playgroud)

c performance x86 assembly gcc

6
推荐指数
1
解决办法
1260
查看次数

检查内联汇编中的特定系统调用支持

我的应用程序建立在较旧的环境上,不支持更新(特定)的系统调用.我不能因为我无法透露的原因而升级它们,但不是让它编译时间(这会损失任何'好处')我想知道是否有办法在内联汇编.例如:

#include <syscall.h> 
static int function() {
int z;
#ifdef SYS_some_system_call
    do_this(some_newer_syscall);
    z=1; 
#else
    do_that(older_syscall);
    z=0; 
#endif
}
Run Code Online (Sandbox Code Playgroud)

有没有办法检查汇编中的系统调用支持并使用它(第一次)?

c linux assembly

2
推荐指数
1
解决办法
171
查看次数

运行时修补ELF二进制文件

我有一个程序的共享对象,我需要将指令从'jne/je'更改为jmp.我试图环顾四周,例如关于如何使用LD_PRELOAD进行此操作或无济于事.

c linux assembly

1
推荐指数
1
解决办法
2197
查看次数

标签 统计

assembly ×3

c ×3

linux ×2

gcc ×1

performance ×1

x86 ×1