gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 05:31:42 26 4
gpt4 key购买 nike

一个使用 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/

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