#c #go
#c #Вперед
Вопрос:
У меня есть простая C
функция, которую я вызываю GoLang
. В моей C
функции я использую gettimeofday
функцию. Я понимаю, что эта функция не дает точного времени, и я согласен с этим, поскольку мне нужно только получить некоторое представление. Я просто хочу, чтобы разница во времени была большой for loop
.Когда я запускаю C
функцию из C
программы, она работает нормально. for loop
Для завершения требуется около 3 секунд. Но если я вызываю ту же функцию из GoLang
, похоже, что это не займет много времени for loop
, и программа завершится немедленно.
Вот мой код.
timetest.h
#include <sys/time.h>
#include<stdio.h>
int TimeTest(){
int i=0;
int j = 1000000000;
unsigned long long startMilli=0;
unsigned long long endMilli=0;
struct timeval te;
gettimeofday(amp;te, NULL);
startMilli = te.tv_sec*1000LL te.tv_usec/1000;
for (i=0; i<1000000000; i ){
if (j-1 == i){
printf("matchedn");
}
}
gettimeofday(amp;te, NULL);
endMilli = te.tv_sec*1000LL te.tv_usec/1000;
printf("Start = %d End = %d Total time %dn", startMilli, endMilli, endMilli - startMilli);
return endMilli - startMilli;
}
test.go
package main
// #include <sys/time.h>
// #include "timetest.h"
import "C"
import (
"fmt"
)
func main(){
diff := C.TimeTest()
fmt.Println(diff)
}
Main.c
#include"timetest.h"
int main(){
int diff = TimeTest();
printf("%dn", diff);
return 0;
}
Комментарии:
1. Что такое
j
? Кажется, это происходит из ниоткуда.2. Я был переменной, инициализированной длиной цикла. Добавлено в код.
3. При включенной оптимизации компилятор C оптимизирует ваш цикл и сгенерирует код, который просто выполняет:
i = 999999999; printf("matchedn");