1.2, Konwin (ok), 11:19, 26/03/2008 [ответить] [﹢﹢﹢] [ · · · ]
| +/– |
Мне вот интересно - написание переносимого кода описывается уже лет 20 так - зачем писать что-то еще?
| |
1.3, Ivan_Dives (ok), 11:43, 26/03/2008 [ответить] [﹢﹢﹢] [ · · · ]
| +/– |
revision 1.8
date: 2001/11/29 22:55:57; author: ross; state: Exp; lines: +1 -6
Delete the old BUGS section entry:
> On the VAX bytes are handled backwards from most everyone else in
> the world. This is not expected to be fixed in the near future.
не понял при чём тут вакс. Это, насколько я знаю, компьютеры, которые использовались ещё в 1970... так к чему они здесь?
| |
|
2.4, whirlwind (?), 12:12, 26/03/2008 [^] [^^] [^^^] [ответить]
| +/– |
это такой тончайший юмор, в конце статьи пояснение:
>В названии (''Fighting the lemmings'') нет какого-то особого смысла. Раньше мы говорили >''весь мир VAX'', а теперь весь мир -- i386 и везде работает linux. Все авторы просто >следуют за этим ''леммингом -- вожаком'' и пишут (а ещё хуже -- тестируют) код >исключительно под i386/linux. | |
2.5, Ivan_Dives (ok), 12:15, 26/03/2008 [^] [^^] [^^^] [ответить]
| +/– |
>revision 1.8
>date: 2001/11/29 22:55:57; author: ross; state: Exp; lines: +1 -6
>Delete the old BUGS section entry:
>> On the VAX bytes are handled backwards from most everyone else in
>> the world. This is not expected to be fixed in the near future.
>
>не понял при чём тут вакс. Это, насколько я знаю, компьютеры, которые
>использовались ещё в 1970... так к чему они здесь?
всё, понял
| |
|
1.6, послушайте (?), 12:17, 26/03/2008 [ответить] [﹢﹢﹢] [ · · · ]
| +/– |
> Хотя портирование на NetBSD/sparc64 практически является таким тестом ;-)
собственно я сейчас там на sparc64.
и вот такая конструкция:
uint8_t a[] = { 41, 0, 0, 0, 1, 0, 0, 2, 0, 0, 0, 3 };
uint32_t u32 = *((uint32_t *) &a[1]);
дает Bus error.
это просто пример, пришлось определить (не дословно):
#define LOAD32(p, b) b=(((((((uint32_t)(((b) & 0) | *(((uint8_t *)p) + 3)) << 8) | *(((uint8_t *)p) + 2)) << 8) | *(((uint8_t *)p) + 1)) << 8) | *((uint8_t *)p))
но это думаю медленно, можно как нибудь оптимизировать?
| |
|
2.7, a (??), 14:15, 26/03/2008 [^] [^^] [^^^] [ответить]
| +/– |
typedef union {
char a[4];
uint32_t b;
} c_t;
c_t c;
c.a[0] = 41;c.a[1] = 0;c.a[2] = 0;c.a[0] = 0;
printf("%u", c.b);
| |
2.8, Аноним (8), 18:06, 26/03/2008 [^] [^^] [^^^] [ответить]
| +/– |
и вот такая конструкция:
uint8_t a[] = { 41, 0, 0, 0, 1, 0, 0, 2, 0, 0, 0, 3 };
uint32_t u32 = *((uint32_t *) &a[1]);
дает Bus error.
ЧУВАААК, почитай доки к gcc, в частности non-bugs.txt или как там. ЗАПРЕЩЕНО такое делать.
Чтобы это заработало у gcc есть ключик, но они говорят что в стандартах на C такое поведение не описано, поэтому сосямба. Ну и ничего что этот код совершенно непереносим из-за endianess?
| |
|
3.13, послушайте (?), 10:34, 27/03/2008 [^] [^^] [^^^] [ответить]
| +/– |
>ЧУВАААК, почитай доки к gcc, в частности non-bugs.txt или как там. ЗАПРЕЩЕНО
>такое делать.
>Чтобы это заработало у gcc есть ключик, но они говорят что в
>стандартах на C такое поведение не описано, поэтому сосямба. Ну и
>ничего что этот код совершенно непереносим из-за endianess?
ЧУВАК это просто ПРИМЕР чтобы смысл в чем ОШИБКА показать..
| |
|
2.9, Аноним (8), 20:02, 26/03/2008 [^] [^^] [^^^] [ответить]
| +/– |
> и вот такая конструкция:
> uint8_t a[] = { 41, 0, 0, 0, 1, 0, 0, 2, 0, 0, 0, 3 };
> uint32_t u32 = *((uint32_t *) &a[1]);
> дает Bus error.
И это ты типа удивлен? 'Вон из профессии!' (C)
| |
2.11, очень жаль (?), 10:30, 27/03/2008 [^] [^^] [^^^] [ответить]
| +/– |
ну чи то разорались? умные все что ли?
пытаюсь перенести игрушку одну с DOS с РЕСУРСАМИ это вам вообще о чем нибудь говорит?
а
| |
|
1.14, vle (?), 11:10, 27/03/2008 [ответить] [﹢﹢﹢] [ · · · ]
| +/– |
Мда, "К сожалению, NetBSD заботится о двоичной совместимости".
Как раз к счастью NetBSD заботиться о бинарной совместимости, и очень жаль тех, кто о ней не заботится.
| |
|
2.16, gena2x (?), 14:34, 12/02/2009 [^] [^^] [^^^] [ответить]
| +/– |
>Как можно перепутать обращение к невыравненным данным (по их размеру) с проблеммой strict алиасинга в (я бы посоветовал gena2x попробовать свой тест на ветке 2.x.x - 3.x.x например )?
Пример приводился для x86/linux/gcc. sizeof(int)==sizeof(long) - о каком выравнивании (по размеру) речь?
Да, надо было дописать что -fstrict-aliasing только в четвертой ветке по умолчанию включается в -O2.
>Wstrict-aliasing=2 тогда все проблемные места будет сразу видно:
Не все, к сожалению, посему придётся разобраться в проблеме.
> То дает инструкцию компилятору считать что все указатели разных типов указывают на непересекающиеся области памяти.
Почти все, char* например - исключение.
| |
|
|