Сегментация памяти на языке Си - PullRequest
5 голосов
/ 03 марта 2011

Я читаю текст о языке C по URL-адресу https://cs.senecac.on.ca/~btp100/pages/content/compu.html. В разделе «Сегментация» говорится: «Один логический метод управления адресацией большого количества байтов - это сегментация. Сегментация различаетопределенные области памяти из других областей. Например, операционная система хранит информацию о программе в выделенных сегментах. "enter image description here

Я не совсем понимаю.

Например, если у меня естьследующая программа:

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
    int x = 4;
    int y = 5;
    printf("%d\n", x+y);
  system("PAUSE");  
  return 0;
}

Итак, что хранится в коде сегмента, что в данных сегмента и что в стеке?Пожалуйста.

Большое спасибо

Ответы [ 3 ]

4 голосов
/ 03 марта 2011

Стек - это ваши локальные переменные (такие как x и y).Сегмент кода предназначен для двоичного кода, который фактически выполняется.Наконец, сегмент данных предназначен для значений, которые использует ваша программа (например, для строки PAUSE).

2 голосов
/ 03 марта 2011

Это зависит от компилятора.но в целом, и если у вас есть ОС, которая фактически использует сегментацию, ваши локальные переменные x и y ссылаются на SS, ваши строковые литералы "% d \ n" и "PAUSE" ссылаются на DS, а ваши фактическиеСобранный код является ссылкой на CS.

0 голосов
/ 03 марта 2011

Этот вопрос зависит от системы. Например, дескрипторы сегментов также используются в 32-битных Windows, но для других целей, чем традиционно в 16-битных системах, где требуется сегментация для одновременного обращения к различным областям памяти.

32-битные системы при использовании указателя 32-битного типа могут обращаться ко всему виртуальному адресному пространству, поэтому fs в Windows содержит ключ к специальным структурам, таким как TEB и PEB. Однако в строгом смысле для модели с плоской памятью нет необходимости в сегментных регистрах.

Примеры (для Windows, 32 бита):

mov eax, dword ptr fs:[18h] ; pointer to TEB
mov eax, dword ptr fs:[30h] ; pointer to PEB

Во многих современных системах cs и ds относятся, например, к одной и той же области.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...