1) верно 2 ^ 16 ВА и 2 ^ 18 Па
Страницы - это термины для виртуальных адресов и фреймы страниц для физических адресов.
Смещение указывает адрес байта в пределах данной страницы (или рамки страницы). Остальное в адресе указывает на то, что адрес страницы. И адрес любого байта формируется путем объединения адреса его страницы и его адреса на странице.
Если у вас есть 8-битное смещение и 16-битный виртуальный адрес, адрес страницы составляет 8 бит, и есть 2 ^ 8 страниц. Аналогично для физических адресов адреса фреймов страниц имеют 10 битов, а фреймы страниц размером 2 ^ 10.
И размер страницы или фрейма страницы составляет 2 ^ 8 байт (адреса всегда относятся к байту).
Как программисты, нам нравится полагать, что мы - умные люди, таким образом, трудно признать, что что-то является слишком большим и сложным для ровного размышления о внезапно. Но для крупномасштабного проекта программного обеспечения это верно, и раньше Вы подтверждаете Ваш конечная мозговая способность и начинаете придумывать способы упростить проблему, более обеспеченное, которым Вы будете.
другое главное понять состоит в том, что Вы проведете большую часть своего времени изменяющийся существующий код . Создание начальной кодовой базы является только периодом медового месяца - необходимо разработать код с идеей в памяти, что, 6 месяцев спустя Вы будете сидеть перед ним пытающийся решить некоторую проблему без подсказки, как этот конкретный модуль работает, даже при том, что Вы записали его сами.
Так, что мы можем сделать?
Минимизируют связь между несвязанными частями Вашего кода. Код собирается измениться со временем способами, которыми Вы не можете ожидать - будут showstopper проблемы, интегрирующиеся с незнакомыми продуктами, изменениями требований - и те вызовут пульсацию - на изменениях. Если Вы установили стабильные интерфейсы и кодировали им, можно внести любые изменения, в которых Вы нуждаетесь в реализации без тех изменений, влияющих на код, который использует интерфейс. Вам нужно к [1 112], проводят время и усилие интерфейсы разработки, которые выдержат испытание временем - если интерфейс должен измениться также, Вы возвращаетесь к начальной ситуации.
Устанавливают автоматизированные тесты , что можно использовать для регрессионного тестирования. Да, это - большая работа впереди. Но это окупится в будущем, когда можно будет внести изменение, запустить тесты и установить, что это все еще работает без того тревожного чувства удивления, если все упадет при передаче последнего изменения в управлении исходным кодом.
Откладывают хитрый материал. Время от времени я вижу, что некоторый умный шаблон C++ обманывает и думает, "Ничего себе! Это, в чем нуждается мой код!" Но истина, уменьшение в том, как читаемый и с готовностью понятный код становится, часто просто не стоит увеличенной степени универсальности. Если Вы - кто-то как я, естественный наклон которого состоит в том, чтобы попытаться решить каждую проблему максимально общим способом, необходимо учиться ограничивать его, пока Вы на самом деле не сталкиваетесь потребность для того общего решения. Если тот потребность возникает, Вам, возможно, придется переписать некоторый код - это не грандиозное предприятие.
Одолженный от tvanfosson:
Запускаются с небольшого приложения и говорят да каждый раз, кто-то хочет добавленную новую опцию.
Вот книга, что мы раньше вели наши стандарты кодирования и методы:
Крупномасштабная Разработка программного обеспечения C++
программа, я продолжаю работать, была в разработке в течение почти 10 лет, так как это было сначала составлено в конце общеизвестной салфетки. И проект все еще идет сильный сегодня. Это не было прекрасно, и существуют все еще проблемы с круговыми зависимостями и некоторыми интерфейсами класса, не являющимися очень чистым, но большинство классов не похоже на это, работы программы и наши пользователи счастливы.
я также рекомендовал бы, как был сделан прежде многими другими, Код, Завершенный и Оценка программного обеспечения Steve McConnell. Мне особенно нравится его метафора "растущего" программного обеспечения вместо того, чтобы создать или создать. Этот способ просмотреть программное обеспечение предоставляет себя лучше чему-то, что будет иметь долгий жизненный цикл.
Как я упомянул в другом месте, крупные приложения не просто больше, они отличающиеся . Так так, чтобы мы говорим о программировании в-маленьком и в-большом . Существует основной качественный сдвиг, который происходит в природе проблем и их решений, когда Вы программируете в-большом. Строка очень нечетка, и существуют многочисленные конкретные вопросы, которые могут вынудить Вас через ту строку.
Некоторые из тех проблем включают:
, Как иметь дело со всем это? Изучите и используйте каждую ценную технику, которую Вы можете, и учиться оценивать, которые на самом деле ценны - который будет требовать времени, и нет никакого быстрого ответа.
Однако существует одна техника, которая легка, очевидна, и едина:разделяй и властвуй. изолируйте каждую главную часть функциональности, каждую подсистему, каждую внешнюю зависимость, так, чтобы Ваша основная система только коснулась их в своем внешнем краю. Когда можно изменить каждого из тех путем простой тонкой настройки тонкого интерфейса в очень короткий период времени, тогда Вы выполнили что-то. Это возьмет Вас длинный путь.
С наилучшими пожеланиями.
Инкрементно, с помощью Тест Управляемый Дизайн
Крупные приложения не создаются одной ночью. Корпоративные приложения запускаются с маленьких частей, и затем они загнаны вместе. При разработке Вас, приложения являются таким путем, который может быть увеличен тогда, будет легче интегрироваться со всеми окружающими факторами как базы данных, сторонние инструменты и т.д., Если Вы войдете infoq.com , Вы найдете много большого случая исследований и материалов о масштабировании и архитектуре как MySpace, Amazon и многие другие. Только опыт приведет Вас к разработке больших крупных приложений.
Сделайте его расширяемым, используя шаблоны проектирования, которые означают, что вам не нужно менять все, чтобы втиснуть новую функциональность.
Решите, что вам нужно, чтобы построить и построить это.
Разбейте его на модули, которые выполняют задачи отдельно.
План план план план, знать, что вы строите, прежде чем начать, и построить это и ничего больше.
Пишите только те функции, которые вам нужны, не добавляйте вещи, которые, по вашему мнению, могут быть полезны, но ... оставьте это достаточно гибким, чтобы иметь возможность добавить муравейник, который вам может понадобиться добавить.
Действительно интересно отметить, сколько из этих комментариев говорят, что слепая итерация - единственный путь.
Итерация имеет решающее значение (я большой поклонник), но есть люди, которые могут планировать огромные проекты - просто немногие из нас когда-либо встречали один.
Думайте об этом как о всех нас, играющих в баскетбол на наших дорогах. Мы довольно хороши, мы можем взять большинство корзин и действительно провести отличную веселую игру в парке.
То, что мы никогда не встречали профессиональных игроков, вовсе не означает, что их не существует, и мы не можем пнуть каждый из наших задниц вверх и вниз по площадке весь день.
Единственное, в этом нет профессиональных программных игр - возможно, если бы они были, мы бы увидели их немного больше.
Ну, вы могли бы взглянуть на рациональный единый процесс. Проверьте основные части, выберите некоторые из артефактов, которые вам понадобятся. Составьте список всех необходимых вам функций и упорядочите их в списке требований. Также тщательно спланируйте свою программную архитектуру, чтобы вам не пришлось менять ее позже. С некоторыми из этих советов будет относительно легче разрабатывать большие приложения.
Как кто-то отвечающий за крупное приложение я сказал бы
не ПАНИКУЮТ
Некоторые мысли о продукте и зависимости от поставщика:
@j_random_hacker: На самом деле нет - я все еще думаю, что моя первая точка является аргументом в пользу использования Java в крупных приложениях, не против него. Каждый язык является ОДНИМ языком. Таким образом, всегда необходимо делать приверженность языку, конечно.