Пытаюсь разобраться с кодом ядра (Помогите, кто чем может)

Взгляд изнутри

Модератор: Модераторы разделов

Ответить
mikluxo
Сообщения: 283
ОС: Slackware 12.2
Контактная информация:

Пытаюсь разобраться с кодом ядра

Сообщение mikluxo »

Итак, решил я значит понять, как ядро линукса функционирует, смело взялся за книжку(Азбука ядра):

Код: Выделить всё

include/linux/list.h
349 /**
350 * list_for_each_entry -  iterate over list of given type
351 * @pos:  the type * to use as a loop counter.
352 * @head:  the head for your list.
353 * @member:  the name of the list_struct within the struct.
354 */
355 #define list_for_each_entry(pos, head, member)
356   for (pos = list_entry((head)->next, typeof(*pos), member),
357      prefetch(pos->member.next);
358    &pos->member != (head);
359    pos = list_entry(pos->member.next, typeof(*pos), member),
360      prefetch(pos->member.next))
-----------------------------------------------------------------------------

почему именно так как написано в 358 строке
нельзя ли, например, сделать так:
pos.member!=(*head);
Или я чего-то не понимаю. Почему именно, так, может разыменовывание указателя медленнее, чем взятие адреса. Помогите.
Ich weiss, dass ich nichts weiss, aber wissen Sie es auch?
Завистники на что не взглянут,
подымут вечно лай,
А ты себе своей дорогою ступай,
Полают, да отстанут. Крылов
Спасибо сказали:
Аватара пользователя
RasenHerz
Сообщения: 1341
ОС: Arch Linux amd64

Re: Пытаюсь разобраться с кодом ядра

Сообщение RasenHerz »

сравниваются на эквивалентность два указателя, так чтобы поле структуры не указывало на "голову" двухсвязного списка.
Спасибо сказали:
mikluxo
Сообщения: 283
ОС: Slackware 12.2
Контактная информация:

Re: Пытаюсь разобраться с кодом ядра

Сообщение mikluxo »

да это я понял, меня слегка смущает то, как это сделано:
вообще изначально pos - указатель, или как?
&pos->member!=(head);

*tt=&pos;
tt->member!=head; /*Если написать более простым языком(я еще только учусь)*/
А почему нельзя сравнивать из значения, т.е разименовать указатель (*head)?
Ich weiss, dass ich nichts weiss, aber wissen Sie es auch?
Завистники на что не взглянут,
подымут вечно лай,
А ты себе своей дорогою ступай,
Полают, да отстанут. Крылов
Спасибо сказали:
Аватара пользователя
RasenHerz
Сообщения: 1341
ОС: Arch Linux amd64

Re: Пытаюсь разобраться с кодом ядра

Сообщение RasenHerz »

читай в комментах:
* @pos: the type * to use as a loop counter.
pos - указатель.
А почему нельзя сравнивать из значения, т.е разименовать указатель (*head)?

к не встроенным типам операции ==, != не применимы(по какому критерию компилятор должен их сравнивать?).
встроенные типы int, short, char и т.д.(а также все указатели т.к. они приводятся к типу unsigned long).
Спасибо сказали:
Ответить