результаты составляют 216 байт в 64-битной системе и 148 байт в 32-битной системе
Кто-нибудь может объяснить, почему он показывает такой большой размер, поскольку я проверил, что члены структуры в основном являются указателями.
Содержимое структуры FILE
зависит от реализации (это означает, что они различаются на разных платформах).
В 32-разрядной системе размер указателя обычно равен4 байта и в 64-битной системе размер указателя обычно составляет 8 байтов.
Таким образом, разница в размере, который вы видите (216 - 148 = 68), может быть легко учтена.(Из того, что я помню, эта структура имеет около 15 указателей в Ubuntu GCC).Кроме указателей, размеры других типов, таких как int
, long
(которые могут быть частью структуры FILE
) и т. Д., Могут отличаться от 32- и 64-битных систем.
Включая комментарии @MatteoItalia ниже:
В частности, используя это определение из glibc (и _IO_USE_OLD_IO_FILE
undefined), я получаю 148 байтов (с 4-байтовыми int, указателями, size_t
и __off_t
).
Что касается разницы, существует более 17 указателей (плюс заполнение!), Которые будут учитывать разницу, но в конце есть также некоторое явное заполнение, которое усложняет вычисление (оно становится меньше в 64-битном, так как 15 * sizeof (int) - 4 * sizeof (void *) - sizeof (size_t)
- 40 на 32 бита, но 24 на 64 бита)