hirthwork 08.04.2012 20:32 mcabber92FF2E55

нет, вопрос не про chaotic evil. скажите, я правильно понимаю, отступив sizeof(my_struct) от начала блока аллоцированного malloc'ом, я всегда получу указатель на правильно выровненную область, куда можно зафигачить объект?

1. gelraen 08.04.2012 20:33

с чего бы вдруг? о_О

2. gelraen 08.04.2012 20:34

олсо, у меня в мане написано:
The malloc() function allocates size bytes of uninitialized memory. The
allocated space is suitably aligned (after possible pointer coercion) for
storage of any type of object

3. hirthworkgelraen /1 08.04.2012 20:34 mcabber92FF2E55

с чего бы вдруг «что»?

4. hirthworkgelraen /2 08.04.2012 20:34 mcabber92FF2E55

почитал ман? молодец, я тоже читал. а теперь почитай вопрос

5. gelraenhirthwork /3 08.04.2012 20:34 imax

с чего бы вдруг прибавление sizeof(my_struct) из невыравненного адреса сделало выравненный?

6. hirthworkgelraen /5 08.04.2012 20:35 mcabber92FF2E55

ну а вдруг sizeof(my_struct) == 5, а у меня там вначале int лежит?

7. gelraenhirthwork /4 08.04.2012 20:36 imax

а, ок >_>
Емнип, да. sizeof учитывает padding в конце структуры (если она не помечена как packed)

8. hirthworkgelraen /7 08.04.2012 20:37 mcabber92FF2E55

ок, спасибо

9. gelraenhirthwork /8 08.04.2012 20:39 imax

Собсно, вот:
% make test
cc -O2 -pipe -march=native test.c -o test
% ./test
8
% cat test.c
#include <stdio.h>

struct test
{
int a;
char b;
};

int main(void)
{
printf("%d\n", sizeof(struct test));
return 0;
}

10. hirthworkgelraen /9 08.04.2012 20:41 mcabber92FF2E55

угу, с packed я уже тоже поигрался. а потом вспомнил, зачем мне костыль был нужен — я на месте структурки иногда просто указатель хранить хотел. теперь костыль убрал

Do you really want to delete ?