Ответ 1
Я сделал свой комментарий в ответ.
Это может помочь. Это ссылка, пусть и легкая.
Ссылка на список аргументов Variable начинается на стр. 50, затем она продолжается, стр. 52-53 документы va_list
:
Тип va_list
Тип va_list - это массив содержащий один элемент из одного структура, содержащая необходимые информация для внедрения va_arg макро. Определение C va_list тип приведен на рисунке 3.34
// Figure 3.34
typedef struct {
unsigned int gp_offset;
unsigned int fp_offset;
void *overflow_arg_area;
void *reg_save_area;
} va_list[1];
Макрос va_start
Макрос va_start инициализирует структуры следующим образом:
reg_save_area
Элемент указывает на начало области сохранения регистров.
overflow_arg_area
Этот указатель используется для извлечения аргументов, переданных на стек. Он инициализируется адрес первого аргумента, переданного стек, если он есть, а затем всегда обновить, чтобы указать на начало следующий аргумент в стеке.
gp_offset
Элемент содержит смещение в байтах от reg_save_area до место, где следующий доступный общий регистр аргументов назначения сохраняется. В все регистры аргументов были исчерпан, он установлен в значение 48 (6 * 8).
fp_offset
Элемент содержит смещение в байтах от reg_save_area до место, где следующий доступный регистр точечного аргумента сохраняется. В все регистры аргументов были исчерпан, он установлен в значение 304 (6 * 8 + 16 * 16).