Понимание управления памятью в mingw / g ++ - PullRequest
0 голосов
/ 16 декабря 2008

Мне дали задание, чтобы в основном объяснить это. Я быстро взглянул на документацию компилятора, и, кажется, это хорошее место для начала, хотя он довольно обширный и у меня не так много времени. Я хотел бы знать, нужно ли мне заранее понимать стандарты C99 или есть другой хороший источник, который я могу проверить. Я собираюсь использовать это с Windows, если это имеет какое-либо значение. Я также понимаю простые понятия, такие как кучи, стеки, связи и еще много чего.

Ответы [ 4 ]

2 голосов
/ 16 декабря 2008

AFAIK, g ++ - это просто компилятор C / C ++, не более того. память управляется в соответствии со стандартными библиотеками C / C ++.

1 голос
/ 16 декабря 2008

Любое приличное руководство по C / C ++ должно содержать основы для этой информации, но управление памятью в C / C ++ - это тема огромная Конечно, для начального класса ваш инструктор даст некоторые рекомендации и, возможно, более конкретный, менее открытый вопрос.

0 голосов
/ 16 декабря 2008

Мне не ясно по этому вопросу. Если под «пониманием управления памятью в mingw / g ++» вы имеете в виду «понимать, как компилятор mingw g ++ обрабатывает внутреннюю память во время компиляции файлов, например, когда он выделяет и освобождает узлы абстрактного синтаксического дерева и т. Д.»), Тогда ваш ответ таков: поскольку многопроходный компилятор GCC может не знать оптимального времени жизни для какого-либо конкретного фрагмента данных, но он знает, что большие группы объектов не понадобятся при одном проходе к другому, , поэтому он использует пулы памяти, когда это возможно и сборка мусора в других местах .

С другой стороны, если вы спрашиваете, как "как / когда / в каком порядке ... объекты, функции, переменные и т. Д. Помещаются в стек ... что выделяется, когда и как это влияет на производительность "Тогда вы будете в течение долгой ночи, просматривая код.

0 голосов
/ 16 декабря 2008

g ++ - это просто компилятор. Он следует правилам языка, который он компилирует (в случае G ++, C ++, но вы также упоминаете C99).

А для ваших довольно конкретных вопросов вам может понадобиться

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

C ++ - общеизвестно недостаточно указанный язык. Существуют огромные куски, которые просто не охватываются стандартом, и где компилятор может делать то, что ему нравится. Это немного затрудняет выяснение того, что конкретно делает тот или иной компилятор.

По этой причине вам также следует убедиться, что вы точно знаете, что от вас ожидают. Найдите информацию о том, что язык говорит об управлении памятью, или как g ++ конкретно с этим справляется?

...