2015-04-03 4 views
2

Я читаю «Принципы и практики программирования с помощью C++» Б.Строуступа, и я стараюсь выполнять большинство упражнений. Это очень интересно, и я не знаю, с чего начать.Упражнение для макета памяти C++

Упражнение:

Рассмотрим расположение в 17,4. Напишите программу, в которой указывается порядок, в котором статическое хранилище, стек и свободное хранилище выложены в памяти. В каком направлении растет стек: вверх к более высоким адресам или вниз к нижним адресам?

Компоновка в 17,4:

код - память для кода

Статические данные - пространство для глобальных переменных

Свободный магазин - доступная память

Stack - памяти для вызова функции и пространство для их аргументов и локальных переменных

Как я могу узнать, в каком порядке это все происходит? Еще лучше, как я мог на самом деле вывести порядок в том, что происходит в тот момент, когда это происходит?

Разве это не должно быть обработано компилятором или, может быть, я просто неправильно понял упражнение? Немного советов было бы действительно круто!

Благодаря

+5

Распечатайте указатели на вещи, которые существуют в каждом из этих сегментов. Хотя это предполагает, что значения указателя фактически соответствуют местам физической памяти ... –

+0

Пожалуйста, будьте более конкретными в своем вопросе. Если вы можете сузить вопрос до одного вопроса, это было бы здорово. Например, что такое «оно» в «Не должно ли оно обрабатываться компилятором»? – ryanyuyu

+0

Да, я имею в виду всю эту память, предоставляющую разные части программы (глобальные переменные, стек, свободный магазин). Все, что я знаю, это то, что компилятор делает это для нас, но, как я понимаю, мне нужно каким-то образом сделать программу, которая показывает, в каком порядке компилятор делает то, что он делает – etrusks

ответ

1

Разве это не должно быть обработано компилятором

линкера, более конкретно.

Вот отправная точка, точно так же, как предлагает Джозеф Мэнсфилд.

#include <iostream> 

int static_data; 

int main() 
{ 
    int stack_data; 

    if (&static_data < &stack_data) 
    { 
     std::cout << "Static data is in lower memory than the stack."; 
    } 
} 
+0

Cool теперь я получил :) Спасибо всем парням :) – etrusks

+0

Было бы интересно проверить, не поставил ли ваш компилятор 'int mutable_global' в другом месте, чем' const int const_global', а также 'static int static_mutable_global' и' static const int static_const_global'. Вам придется «чередовать» их и посмотреть, какие из них становятся «без чередования». –

+0

Это был мой первый вопрос на этом форуме, и я поражен тем, как быстро на это на это накладываются ответы. Так круто! – etrusks