107  Freddy [Off]
(7.11.2015 / 17:44)
Oak, по-моему, по спецификации, но gcc поддерживает флаги, изменяющие правила выравнивания.
553  Oak [Off]
 Эль Презеденте
(7.11.2015 / 16:53)
Freddy, это компилятор выравнивает или по спецификации С такое?
107  Freddy [Off]
(7.11.2015 / 12:50)
Не трогая структуру parent, можно изменить смещение child, если изменить тип child.id с int на double. В этом случае смещение станет равным 8, потому что компилятор выравнивает данные по самому большому элементу и patent в памяти будет располагаться так:
первые 4 байта - parent.id
следующие 4 байта пустые
затем 8 байт child.id
107  Freddy [Off]
(7.11.2015 / 00:03)
vl@volk, в больших сишных проектах, где куча разнообразных структур есть. Ради интереса посчитал, сколько раз встречается в Линуксе:
  1. igor@Samsung-PC:/usr/src/linux-3.19.0$ grep --include=*.c -r 'container_of' . | wc -l
  2. 10532
275  Naik [Off]
(6.11.2015 / 23:01)
vl@volk, говорят весь линукс это набор таких макросов
3789  vl@volk [Off]
 знает толк
(6.11.2015 / 22:51)
где оно используется? это что так облегчает задачу?
107  Freddy [Off]
(6.11.2015 / 22:29)
По вопросу в конце: ни у кого предположений нет? Завтра днём дам ответ.
107  Freddy [Off]
(6.11.2015 / 10:11)
Oak, нет, без ptr мы не будем знать из чего вычитать смещение, а без type и member не сможем вычислить само смещение.
553  Oak [Off]
 Эль Презеденте
(6.11.2015 / 04:24)
Элегантно!

Только у меня так и не исчез вопрос: в определении функции присутствуют два параметра — структура и указатель на нее. Нельзя обойтись чем-то одним?
Всего: 9
К записи
Прочие языки
Категории

Мы в соцсетях

tw tg yt gt