Check Levi9 best QA positions to Backbase team!
×Закрыть
👍НравитсяПонравилось0
В избранноеВ избранном0
LinkedIn
Допустимые теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Допустимые теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
>>Чим C++ для ARM відрізняється від C++ для х86 (x86-64)?

sizeof(int)

По большому счету ничем. Кроме, может быть, того что на на ARM проще столкнуться с проблемами выравнивания и strict aliasing, а также багами кодогенератора компилятора.

Розмір типів вже пригадали. Ще може відрізнятись порядком байт та вирівнюванням даних в структурі. Доступ до даних, що знаходятться по адресі яка не є кратною розміру типу (short, int) може аварійно завершити процесс (залежить від налаштувань ОС)

Различными фреймворками?. Кроме того что посчитать нужно сперва ввести это «посчитать», а потом вывести. Ну и ассемблерные вставки, которыми матерые с+±ники не брезгуют.

Технические темы на доу, все в кофепоинт!

кто лучше, грузины или армяне ? ©

Из практических моментов можно наступить на выравнивание байтов, порядок оных, да старый добрый размер инта. Но это не С++ отличается, строго говоря.

Размер int везде 4-байта, а вот размер типа long уже может прыгать.

в том ARMе, который мне попадался, в thumb-режиме 2
это не из свежих

Сорри,не прав.
Только что загуглил —

int — basic signed integer type. At least 16 bits in size.

Это по c99.

Совет правильный, но далеко не безобидный. Программер, открыв для себя stdint.h, начинает лепить uint32_t/uint_fast32_t/uint_least32_t везде, где ему нравится, особо не задумываясь о том, как оно, например, ляжет на нативный машинный код x86-64 (я уже не говорю о IA64 архитектуре), какую потерю производительности даст безобидный uint32_t. Поэтому правильный совет — юзать stdint.h только тогда, когда тебе нужно конкретное количество бит, например, для разбора переданных извне данных, разбор формата файла и т.п., а так — только signed/unsigned int.

Интересно хехе, вот ради интереса проверю в чем разница между моим uint32 и unsigned int на асме и даже сделаю замер времени осциллографом :).

Согласно C99, uintXX_t может мапится на внутренний тип компилятора (а у всех компиляторов это так и есть) и в кодегенерации учавствует внутренний тип, по-этому свой uint32 ничего не даст.

Когда то считалось инт — машинное слово, равное разрядности проца. По крайней мере так писал Самофалов в своих старых книжкам по микроконтроллерам в 90х. А вообще компилятор может это перемолоть на свой лад на ура, так что сайзоф в помощь. Работал на Си компиляторе под 8ми битные однокристаллки (атмеги), так там инт имел разрядность 16ть :), а не 8мь, как можно было бы подумать. А вообще, уже давно пишу через переопределяемые типы, что то типа uint8, uint16, uint32, int32 и т.п. Так сразу контроллируешь разрядность и развязываешься от конкретной платформы. В платформенно-независимом коде вообще отличий быть не должно. В платформенно-зависимой будет, но скорее всего правило плохого тона завязываться на особенности конкретного компилятора (например прагмы и прочее). Как то пользовался хорошей монстрообразной коммерческой (не ломанной, а оплаченной) либой, на писюке все работало, наигрался, оттестировал все что надо, пересобрал под таргетовую платформу (АРМ9), хрен заработало (коммуникационный протокол, что парсился на писюке, в арме ушел в ступор), покурил, не нашел в чем соль, забил, написал сам либу, бо так быстрее.

Кстати в thumb режиме АРМ переключался из 32 в 16бит, так что вроде как резонно инт размером в 2 байта делать было. Сам в таком не работал, не успел :).

я может ошибаюсь (давно это было) но если писать под однокристалки, то там не очень хорошо со стеком (его нет, хотя можно эмулировать через регистры — но их мало, либо флеш-память — медленно)

на современных арм процессорах проще — там си++ один к одному, разница будет в таймингах и на уровне асма

А вот в это вот вряд ли, я под АРМ не писал, но подозреваю , что сам синтаксис языка никак не отличается — максимум, это различные библиотечные ф-ции.

Обычно выводом «objdump -S»

Ээ, ничем кроме внутренностей компилятора и может быть наличия/отсутствия каких-то библиотек?

Подписаться на комментарии