C gettimeofday не работает должным образом с GoLang

#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");