Я никак не могу найти вот что: Везде говорится, что два логических адреса могут соответствовать одному физическому, но нигде не упоминается нужно ли следить за этим самому или же процессор все разрулит Просто неудобно же очень так, если надо самому учитывать: Например чтобы установить стек на определенный сегмент нужно проверять не сойдется ли он с кодом или данными и не попортит ли что там Расскажите пожалуйста кто знает
Treant а как вы иначе получите доступ к памяти другого процесса? это оси решать. в зависимости от надобностей. любая расшареная память использует это
Очевидно, человек недоумевает и пугается, что адреса 0100: 0000 и 0000: 1000 указывают на одну и ту же ячейку. Очевидно, что если с адреса 0:1000 расположен код, а стек установить на 0100:0100, то конечно, попортит. Однако, реально такое самовольство делают только в com-файлах, радуясь полной свободе. И при этом прекрасно знают, ГДЕ их код и данные, чтобы их не перекрыть стеком. А создавая экзешник, размер стека указывается, и ОС (даже такая, как MS-DOS), при загрузке этой программы, занесет в SS: SP такие значения, чтобы а) стек был нужного размера, б) чтобы он не перекрывался с кодом и данными, если программист не указал это специально. Проще говоря, при запуске программы стек уже создан. Если ты для каких-то целей меняешь его расположение - ты должен понимать, что ты делаешь. Или ты собрался писать программу, в которой сегментные регистры то и дело увеличиваются-уменьшаются на некоторое число, и волнуешься, что в результате что-то затрешь в своем же коде? ОБЯЗАТЕЛЬНО затрешь! ))) (почему? потому что ты задал этот вопрос)