-
- AFAIK компилятор может только отставить адреса до какой-то кратности ("проредить"), и то только если это не отключено надлежащей прагмой. ИМХО обратное, если и возможно, то пренебрежимо-экзотично и заслуживает только warning в комментах при объя Николай Коровин(8 знак., 30.04.2006 22:33, )
- У первоисточников : Керниган, Пайк "Практика программирования" 2004 (англ. вариант 1999, 2004) Charlie(555 знак., 28.04.2006 13:44, )
- В iso/iec 9899:1999 указано что компилер не может поменять местами поля структуры, а вот проредить их может запросто. Так что в общем случае всё-таки нельзя гарантировать как структура отляжет в памяти. Выравнивание полей как правило рулится прагмами, кот scum(597 знак., 27.04.2006 11:54, )
- aligned in an implementation defined manner appropriate to its type - ну а я про что - они лягут ровно так , как были бы объявлены без структуры, а в конце структуры - да могут встать лишние байты определяемые правилами выравнивания для данной target - volkanaft(27.04.2006 14:30, )
- Нет, простите. scum(315 знак., 28.04.2006 09:28, )
- Я хотел сказать, что volkanaft(123 знак., 28.04.2006 14:27, )
- еще volkanaft(93 знак., 28.04.2006 14:38, )
- В том то и дело, что без pack(1) может будет, а может и нет. - she(28.04.2006 14:56, )
- Программа отлаженная на PC(Borland) c массой конструкций такого типа успешно функционировала и на 51-й архитектуре(Keil), и наоборот , и без pack-ов - volkanaft(28.04.2006 15:15, )
- не пойму, при чем тут борланд... she(134 знак., 28.04.2006 15:34, , картинка)
- Керниган & Ричи volkanaft(356 знак., 28.04.2006 16:10, )
- Я в курсе, спасибо. Но это не значит, что 1+2=4. - she(28.04.2006 16:34, )
- повторяю еше раз... - volkanaft(28.04.2006 16:53, , ссылка)
- при pack(1) это будет положим хххххх+2+1, а при pack(2) xxxxxx+2+2, а при pack(3)(может и такое быть!) xxxxxx+3+3 - volkanaft(28.04.2006 17:02, )
- компилируйте, наслаждайтесь... she(693 знак., 28.04.2006 17:10, )
- к сожалению не смог насладиться в полной мере... volkanaft(94 знак., 28.04.2006 17:30, )
- Ошибался . . . Был неправ :-( ; ( но как то она работает ;о), и на PC и на 51-й ??? пока не разобрался в чем заковыка) - volkanaft(28.04.2006 18:23, )
- И? Ваши комментарии относително строк 2,3,4 выведенного текста? - she(28.04.2006 17:36, )
- Warning выдается : Warn : proj0001.c(44,2):Structure packing size has changed - volkanaft(28.04.2006 17:32, )
- к сожалению не смог насладиться в полной мере... volkanaft(94 знак., 28.04.2006 17:30, )
- компилируйте, наслаждайтесь... she(693 знак., 28.04.2006 17:10, )
- при pack(1) это будет положим хххххх+2+1, а при pack(2) xxxxxx+2+2, а при pack(3)(может и такое быть!) xxxxxx+3+3 - volkanaft(28.04.2006 17:02, )
- повторяю еше раз... - volkanaft(28.04.2006 16:53, , ссылка)
- Я в курсе, спасибо. Но это не значит, что 1+2=4. - she(28.04.2006 16:34, )
- Borland - это компилятор такой . . . - volkanaft(28.04.2006 15:42, )
- Керниган & Ричи volkanaft(356 знак., 28.04.2006 16:10, )
- вернее с обоими pack-ми с aligned word - так даже шустрее . . . - volkanaft(28.04.2006 15:28, )
- естественно aligned = word при target = PC - volkanaft(28.04.2006 15:38, )
- изменены были только функции getpixel(),putpixel() & inigraf(), - volkanaft(28.04.2006 15:19, )
- не пойму, при чем тут борланд... she(134 знак., 28.04.2006 15:34, , картинка)
- Программа отлаженная на PC(Borland) c массой конструкций такого типа успешно функционировала и на 51-й архитектуре(Keil), и наоборот , и без pack-ов - volkanaft(28.04.2006 15:15, )
- В том то и дело, что без pack(1) может будет, а может и нет. - she(28.04.2006 14:56, )
- еще volkanaft(93 знак., 28.04.2006 14:38, )
- Чтобы поля будут лежали ровно друг за другом нужно заранее отсортировать их от бОльших к мЕньшим, возможно тогда и pragma pack не понадобится. (при условии, что структуры не даны "свыше") - =AlexD=(28.04.2006 10:54, )
- далеко не факт. scum(295 знак., 28.04.2006 11:14, )
- Они этого не делают, т.к. это и не требуется, размеры всех примитивных типов кратны степени двойки. Если проц принципиально не может обработать char по невыровненному адресу, то для них делают char == short или char == int. Короче, если кто-то назовёт пр =AlexD=(47 знак., 28.04.2006 11:32, )
- Да, что-то пример-то я не могу вот так сходу. :-) scum(311 знак., 28.04.2006 13:20, )
- Они этого не делают, т.к. это и не требуется, размеры всех примитивных типов кратны степени двойки. Если проц принципиально не может обработать char по невыровненному адресу, то для них делают char == short или char == int. Короче, если кто-то назовёт пр =AlexD=(47 знак., 28.04.2006 11:32, )
- далеко не факт. scum(295 знак., 28.04.2006 11:14, )
- Я хотел сказать, что volkanaft(123 знак., 28.04.2006 14:27, )
- Нет, простите. scum(315 знак., 28.04.2006 09:28, )
- aligned in an implementation defined manner appropriate to its type - ну а я про что - они лягут ровно так , как были бы объявлены без структуры, а в конце структуры - да могут встать лишние байты определяемые правилами выравнивания для данной target - volkanaft(27.04.2006 14:30, )
- Если какой то компилятор это и делает(не встречал), то там должна быть возможность отключения такой "оптимизации", иначе многие программы (ANSI C) будучи портированы на эту платформу вовсе работать не будут - volkanaft(27.04.2006 11:09, )
- + если переменные входящие в эту "группу" однородны(одного типа) - то это естественно массив else структура - volkanaft(27.04.2006 11:23, )