g ++ - это просто компилятор. Он следует правилам языка, который он компилирует (в случае G ++, C ++, но вы также упоминаете C99).
А для ваших довольно конкретных вопросов вам может понадобиться
- Обратитесь к языковому стандарту (для C ++ это ISO / IEC 14882). К сожалению, не бесплатно, но вы можете найти в Интернете шашки бесплатно, которые в основном так же хороши, как и реальные. Последняя официальная версия - C ++ 2003 (ISO / IEC 14882-2003), но содержит только очень незначительные изменения по сравнению с оригиналом 89 года. C ++ 09 тоже близок к завершению, и опять же, есть черновики, доступные для этого. Тем не менее, будьте осторожны, это тяжелое чтение, и я бы не советовал пытаться найти там что-нибудь, если вы не очень хорошо знаете язык.
- Анализ кода ассемблера
компилятор генерирует. Стандарт
оставляет много до
реализация, поэтому единственный способ
узнать, как G ++ специально толкает
вещи на стек, в котором
порядок и так далее, это проанализировать
код, который он генерирует. (Также обратите внимание, что
это вероятно меняется между
разные версии G ++)
C ++ - общеизвестно недостаточно указанный язык. Существуют огромные куски, которые просто не охватываются стандартом, и где компилятор может делать то, что ему нравится. Это немного затрудняет выяснение того, что конкретно делает тот или иной компилятор.
По этой причине вам также следует убедиться, что вы точно знаете, что от вас ожидают. Найдите информацию о том, что язык говорит об управлении памятью, или как g ++ конкретно с этим справляется?