LINUX.ORG.RU

История изменений

Исправление watchcat382, (текущая версия) :

сколько сегментов вы хотите сделать тут?

Если я правильно помню книжку, то технически программа может иметь 16 с хвостиком тысяч сегментов размером от одного байта до 4 гигабайт. Сомневаюсь что много программ у которых надется больше сущностей,требующих отдельного сегмента. Но и это не проблема - можно что-то объединить в один сегмент если вдруг не хватит.

В вашем примере в отдельные сегменты надо помещать массивы. А просто int за своё место в памяти не вылезет. Разве что кто-то попытается обратиться к нему как к long int. Но на это даже сишный компилятор выругается. Ну и сама функция(ее исполняемый код) может быть помещена в отдельный сегмент. Тогда вызвать ее можно будет только через точку входа(«шлюз») и исключается случайная передача управления в середину,например если каким-то образом будет испорчен адрес возврата где-нибудь. Да, goto куда_попало уже будет не написать. И это хорошо. (не просто goto,а именно куда попало - то есть внутри функции можно).

Кстати, с использованием сегментного механизма одна программа на i386 может иметь доступ к виртуальному адресному пространсту в 64 терабайта. И только несовершенство внутренностей ОС приводит к тому что адресное пространство для программы ограничено четырьмя гигами - опять потому что всё пихается в один сегмент. А он действительно ограничен четырьмя гигами.

Исходная версия watchcat382, :

сколько сегментов вы хотите сделать тут?

Если я правильно помню книжку, то технически программа может иметь 16 с хвостиком тысяч сегментов размером от одного байта до 4 гигабайт. Сомневаюсь что много программ у которых надется больше сущностей,требующих отдельного сегмента. Но и это не проблема - можно что-то объединить в один сегмент если вдруг не хватит.

В вашем примере в отдельные сегменты надо помещать массивы. А просто int за своё место в памяти не вылезет. Разве что кто-то попытается обратиться к нему как к long int. Но на это даже сишный компилятор выругается. Ну и сама функция(ее исполняемый код) может быть помещена в отдельный сегмент. Тогда вызвать ее можно будет только через точку входа(«шлюз») и исключается случайная передача управления в середину,например если каким-то образом будет испорчен адрес возврата где-нибудь. Да, goto куда_попало уже будет не написать. И это хорошо. (не просто goto,а именно куда попало - то есть внутри функции можно).