Это старый. Это поле было впервые добавлено с коммитом 1ea89a402d892b68b193e2e4390d8eb33ed686e7 13 октября 1997 года одним из разработчиков RedHat. Первоначально он был в файле libio / libioP.h. В это время был добавлен следующий код:
/* We had to extend _IO_FILE but this isn't easily possible without
compatibility problems. So we mimic the C++ way to do this which
especially takes care that the position of the vtable stays the
same. */
struct _IO_FILE_complete
{
struct _IO_FILE_plus plus;
_IO_off64_t _offset;
int _unused2[16]; /* Make sure we don't get into trouble again. */
};
Таким образом, похоже, что это поле было изначально добавлено для обработки совместимости с C ++ относительно виртуальной таблицы.
Со временем размер и тип этого Поле было изменено, поскольку в эту структуру было добавлено больше полей, чтобы сохранить то же смещение Текущая версия этой структуры содержит одно дополнительное поле int
, одно дополнительное поле size_t
и четыре дополнительных поля указателя, которые учитывают разницу в размерах между исходной и текущей версией.