2014-12-15 3 views
1

Если я выделил память для int, мне будет (обычно) задано 4 байта. Насколько я понимаю, эти 4 байта составляют всю площадь этой переменной в памяти.Как и где хранится информация типа переменной?

Кроме того, если у меня есть указатель на этот int, он будет содержать адрес первого из 4 байтов.

Однако, как моя программа знает, что тип данных в этих четырех байтах состоит из одного int? И поскольку мой указатель содержит только этот адрес, который предположительно содержит только сырые данные, как он знает, что всякий раз, когда адрес, который он содержит, разыменовывается, его следует интерпретировать как int?

Где этот тип информации и как и когда программа обращается к ней?

+2

'его следует интерпретировать как int'..well, поэтому это' int * ', а не' char * 'или' float * ' –

+7

. Информация находится в исходном коде, а компилятор создает машину код для соблюдения спецификации в исходном коде. Задача компилятора - получить право доступа. –

+2

Он не хранится нигде в скомпилированной программе. Это компилятор, который обрабатывает его. –

ответ

7

После того, как вы скомпилируете программу на C, информация о типе по существу потеряна (или по другому, она больше не нужна). Это объясняется тем, что интерпретация любых байтов памяти в C соответствует коду, который их читает. Например, вы можете прочитать четыре байта int как char[4] без каких-либо проблем.

Информация о типе может быть сохранена в некоторых случаях по особым причинам, например, при отладке. Но это сохраняется в форматах, специфичных для платформы (например, DWARF в Linux), и вообще не является частью стандарта C.

Смежные вопросы