Если поля struct timeval
имеют long
целочисленный формат (который может быть или не быть) в 32-битном формате, , потому что вам нужно, чтобы он был такого размера. Давайте проведем некоторый анализ: я взялэта временная метка в формате NTP и преобразована в формат struct timeval
(для сейчас отметка времени) в моей системе:
ntpts.c:120:process: NTP(dec): 3771731346.612550000
ntpts.c:121:process: NTP(hex): 0xe0d00d92.9cd013a9
ntpts.c:123:process: UNIX: 1562742546/0x5d258f12
ntpts.c:135:process: gmtime: 10/jul/2019, 07:09:06.612550000
ntpts.c:136:process: localtime: 10/jul/2019, 10:09:06.612550000
tv_sec ==> 1562742546
tv_usec ==> 612550
, чтобы получить одну отметку времени с этим разрешением (числосекунд с 00:00 часов января / 1/1970 и микросекунд) вам нужно как минимум 52 бита (ну, обычно tv_sec
- это поле long
или long
long
64 бита, из-за переполнения, которое произойдетв Феве, 2038, и некоторые системы уже исправили это), и tv_usec
может быть помещен в 24-битную переменную (usec идет от 0 до 999999, поэтому им нужно по крайней мере 20 бит), но заполнение компилятора сделает его 32-битным в любом случае, как минимум.
В случае, если вы хотите сохранить полное разрешение usec с 32 битами, вам потребуется не менее 20 бит для представления доли секунды, и у вас будет только 12 бит для представления целого числачасть.В этом случае вы сможете выразить только секунды от 0 до 4095, что составляет более одного часа (01h8m16s).Это возможно, но чтобы сделать эту временную метку абсолютной, вам нужно указать, к какому абсолютному часу в истории относится эта временная метка.
С другой стороны, если вы уменьшите гранулярность до мс, вы можетечтобы получить более 1000 часов контрольного окна, вам необходимо учесть это, чтобы окончательно решить, что делать дальше.
AMENDMENT
Кстати, системный вызов gettimeofday(2)
фактически устарел.Почти все системы, используемые в настоящее время, используют системный вызов clock_gettime(2)
, который имеет разрешение наносекунд и позволяет вам выбрать правильные системные часы для получения метки времени.