[devel] Re: RPM::Database

Alexey Tourbin at на altlinux.ru
Ср Окт 19 23:07:02 MSD 2005


On Wed, Oct 19, 2005 at 10:04:00PM +0400, Dmitry V. Levin wrote:
> On Wed, Oct 19, 2005 at 09:46:29PM +0400, Alexey Tourbin wrote:
> > Такое впечатление, что происходит неправильный dereferencing, то есть
> > rpmTagTable в качестве указателя уже смотрит непойми куда.  Я озадачен. :)
> 
> Это просто:
> 
> 1. extern const struct headerTagTableEntry_s rpmTagTable[];
> Что такое символ rpmTagTable для приложения?
> Это адрес, по которому находится первый элемент массива.

Да.

> 2. extern const struct headerTagTableEntry_s * rpmTagTable;
> Что такое символ rpmTagTable для приложения?
> Это адрес, по которому находится адрес первого элемента массива.

Нет.  И тот и другой -- адрес первого элемента массива.  Только первый
адрес константный, его нельзя менять (компилятор сразу может проставить
сам этот адрес в код, но не проставляет).  А второй адрес можно менять,
компилятор обязан использовать косвенную адресацию.  Впрочем, я не до
конца понимаю, что там делает компилятор.  С точки зрения самого языка
Си эти две записи идентичны.

Нужно посмотреть, что там `gcc -S' показывает, но лень.  Но может
посмотрю. :)
----------- следущая часть -----------
j e┴ф╜┼┴Ъ╕
l┼	з╤ЙчвоT╝Xm╤÷Ъ√+-╠╘m√)Нф┼ЮЧ≤╘z╧ ┼_щzВ╔Щ╚miхfz{lЪm4Г]5ВЩъiв÷▐з╤ж°├g╖╣╦╖


Подробная информация о списке рассылки Devel