gpt4 book ai didi

c++ - ntoh功能在RHEL/GCC下是如何实现的?

转载 作者:IT王子 更新时间:2023-10-29 00:38:12 26 4
gpt4 key购买 nike

生产问题导致我们的团队提出以下问题:

  1. 在使用 GCC 4.4.6 的 RHEL6 下,ntohsntohl 是如何实现的?
  2. 实现速度快还是慢?
  3. 我怎样才能真正看到为函数生成的汇编代码?

我知道问题背后的含义可能看起来牵强和荒谬,但我被要求调查。

有问题的硬件是一个 Intel 盒子,小端,64 位处理器并以 64 位编译。

最佳答案

执行以下操作:

测试.c

#include <arpa/inet.h>
int main()
{
volatile uint32_t x = 0x12345678;
x = ntohl(x);
return 0;
}

然后编译:

$ gcc -O3 -g -save-temps test.c

然后分析生成的 test.s 文件,或者运行 objdump -S test.o

在我的机器(Ubuntu 13.4)中,相关的汇编程序是:

movl    $305419896, 12(%esp)
movl 12(%esp), %eax
bswap %eax
movl %eax, 12(%esp)

提示:

  • 305419896 是十进制的 0x12345678。
  • 12(%esp) 是volatile变量的地址。
  • 所有movl 指令都用于xvolatile 特性。唯一真正有趣的指令是 bswap
  • 显然,ntohl 被编译为 inline-intrinsic。

此外,如果我查看 test.i(预编译输出),我发现 ntohl#defined ,因为 __bswap_32(),这是一个内联函数,只需调用 __builtin_bswap32()

关于c++ - ntoh功能在RHEL/GCC下是如何实现的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17953371/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com