указатель всегда выровнен по байту - PullRequest
2 голосов
/ 15 июня 2010

Я прочитал что-то вроде указателя должно быть выровнено по байту.Мое понимание в типичной 32-битной архитектуре ... все указатели выровнены по байту ... Нет?

Пожалуйста, подтвердите.

может ли быть указатель, который не выровнен по байту?

В основном это упоминается в справочном руководстве по аппаратному обеспечению для памяти дескриптора tx.

Ответы [ 3 ]

9 голосов
/ 15 июня 2010

Да, вы не можете адресовать любой объем памяти меньше байта.

5 голосов
/ 15 июня 2010

В C указатель указывает на объект & кинжал;

Единственными объектами, которые не являются целым числом байтов, являются битовые поля.

Язык C не позволяет создавать указатель на битовое поле; этот код приведет к ошибке компилятора: «невозможно получить адрес битового поля« b »»:

struct S { unsigned int a:4, b:4, c:4, d:3, e:1; };

int main ( void ) {
    struct S s;
    int *i = &s.b; // would point half a byte into s
    return 0;
}

Указатели могут быть увеличены только на целое число размера объекта, на который они указывают.

Поскольку вы не можете создать такой указатель на объект размером менее одного байта или увеличить указатель менее чем на один байт, вы не можете иметь указатель, выровненный менее чем на один байт.

& кинжал; в смысле С, а не в смысле ОО

1 голос
/ 15 июня 2010

Если указатель или число не выровнены по байту, они начнутся с середины байта. То есть некоторые биты байта принадлежат одному указателю, а другие - другому. Это было бы странно, и это не происходит на практике.

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