Когда вы имеете дело с объектом в kdb, думайте о структуре K (на самом деле структура k0, поскольку K на самом деле является указателем на структуру k0) в качестве заголовка списка.G0 действительно отмечает начало того, где начинается список, если ваш объект K действительно влияет на список.Например, список из 16 чисел с плавающей запятой может быть распределен следующим образом.
K my_list = malloc(offsetof(struct k0, G0) + sizeof(F) * 16);
my_list->t = KF;
my_list->n = 16;
Посмотрите здесь, как структура k0 действительно просто занимает начало памяти, и дополнительное пространство для массива выделяется после его начала вG0 [0] с достаточным пространством для размещения 16 поплавков.
Обратите внимание, что kdb на самом деле не использует malloc, поскольку у них есть некоторый пул памяти.Выше приведен лишь упрощенный пример того, как это может работать.