c - C 中的 -mno-sse 标志和 gettimeofday() 出错

标签 c gcc gettimeofday

一个使用 gettimeofday() 的简单 C 程序在没有任何标志 (gcc-4.5.1) 的情况下编译时工作正常,但在使用标志 -mno-sse 编译时不提供输出。

#include <stdio.h>
#include <stdlib.h>

int main()
{
    struct timeval s,e;
    float time;
    int i;
    gettimeofday(&s, NULL);
    for( i=0; i< 10000; i++);
    gettimeofday(&e, NULL);
    time = e.tv_sec - s.tv_sec + e.tv_usec - s.tv_usec;
    printf("%f\n", time);
    return 0;
}

我有 CFLAGS=-march=native -mtune=native 有人可以解释为什么会这样吗? 该程序通常返回正确的值,但在启用 -mno-sse 的情况下编译时打印“0”。

最佳答案

标志 -mno-sse 导致浮点参数在堆栈上传递,而通常的 x86_64 ABI 指定它们应通过 SSE 寄存器传递。

由于您的 C 库中的 printf() 是在没有 -mno-sse 的情况下编译的,因此需要传入浮点参数根据 ABI。这就是您的代码失败的原因。它与 gettimeofday() 无关。

如果您希望从使用-mno-sse 编译的代码中使用printf() 并将浮点参数传递给它,您需要重新编译您的C 库该选项和该版本的链接。

关于c - C 中的 -mno-sse 标志和 gettimeofday() 出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3687845/

相关文章:

c - gets 有用吗?

c++ - PC与Arduino串口通信

c - 检查文件是否是目录时我缺少什么(在 c 中)?

c++ - 保证内存排序和正确的编程实践

c++ - 关于我在 OS X 上可用的各种 C++ 编译器的许多问题

linux - eglibc:以毫秒为单位获得正常运行时间

c - 将 malloc 数组分配给堆栈数组

gcc - 使用 gcc 编译(Windows 上的 cygwin)

c - 如何从 C 中的 gettimeofday 获取日期时间?