Существует большая разница между доступом к структуре напрямую и через указатель.
Если вы обращаетесь к ней напрямую, код получит прямой доступ к адресу памяти, используя упрощенный синтаксис ассемблера, фиктивной архитектуры.Приведенные ниже примеры обращаются к члену status
, который хранится со смещением 44 в структуре:
MOVB varno+44, reg2
С другой стороны, если вы обращаетесь к нему через локальный указатель, указатель обычно сохраняетсяв реестре.Таким образом, код будет выглядеть примерно так:
MOVB 44[reg1], reg2
В худшем случае, если сам указатель является глобальным указателем, тогда код должен сначала прочитать значение указателя:
MOVL info_ptr, reg1
MOVB 44[reg1], reg2
Компилятор может в некоторых случаях кэшировать указатель при выполнении нескольких обращений.Однако, если доступ осуществляется посредством записи (в указатели или в символы), то компилятор должен предположить, что сам указатель мог быть изменен, и, таким образом, перечитать его из памяти.
Я бы настоятельно рекомендовал использовать один глобальныйструктура, если ваше приложение содержит только один.