Как процессор узнает размер переменной, чтобы правильно ее прочитать? - PullRequest
1 голос
/ 29 декабря 2011

Ну, я довольно тупой по этому типу темы, так что извините, если я совершенно не согласен с вещами. Я постараюсь быть ясным.

В памяти, когда команды читаются, например, как процессор узнает, что он должен, например, прочитать 4-байтовую строку или 10-байтовую строку для работы с этой командой? или другая команда, процессор знает, что он должен прочитать размер int64, чтобы правильно прочитать данные для работы с ним? где-то хранится размер? возможно рассчитывается?

Ответы [ 3 ]

3 голосов
/ 29 декабря 2011

Размер данных обычно кодируется в инструкции или неявно известен. Например, x87:

fild    word [testdata]    ; loads 16 bits

fld     dword [testdata]   ; loads 32 bits
fld     qword [testdata]   ; loads 64 bits
fld     tword [testdata]   ; loads 80 bits
2 голосов
/ 29 декабря 2011

Давайте посмотрим на строки для частичного ответа на этот вопрос, в C нужно завершать строки на ноль (т.е. заканчивать их нулевым байтом или \0), поэтому это простая работа чтения до нулевого байта.

На фиксированных типах данных (скажем, int) компилятор сообщит ЦПУ, что он имеет дело с int, и как компилятор, так и ЦП будут работать с той же архитектурой, их ints будет одинаковой длины.

0 голосов
/ 29 декабря 2011

Вы должны указать «ему» свою длину данных.

Это причина, по которой вам нужно выделить память, например

char test[17];
...