Суббота, 20 Сентябрь 2014 16:35

Особенности разработки под Raspberry Pi Model B

Автор
Оцените материал
(1 Голосовать)

Поскольку Raspberry Pi имеет архитектуру ARM, то на нём встречаются все ограничения, которые GCC принудительно выставляет для архитектуры ARM, включая дефолтную беззнаковость типа char (для x86 и x86_64 char по дефолту знаковый тип).

Размеры переменных:
char - 1 байт
int - 4 байта
short int - 2 байта
long int - 4 байта
float - 4 байта
double - 8 байт
long long int - 8 байт
long double - 8 байт

Для сравнения размеры переменных для 64-х битной системы на i7-2600K:
char - 1 байт
int - 4 байта
short int - 2 байта
long int - 8 байт
float - 4 байта
double - 8 байт
long long int - 8 байт
long double - 16 байт

Как видно, отличия в размерах переменных типов long int и long double.

Следует помнить, что вся оперативка никогда не доступна одной отдельной программе, поскольку, одна часть оперативки занята ядром, а другая - другим софтом. При этом, около 15% оперативки уже занято только ядром (для модели A эта величина должна быть больше 29%). Поэтому, несмотря на то, что использование переменных без избыточного расходования памяти актуально везде и всегда, здесь оно актуально ещё больше. Поэтому если, например, те или переменные не принимают значений, выходящих за рамки short int, желательно использовать именно short int, а не int. Кстати, напоминаю, что те же printf и scanf для чтения и вывода short int используют формат "%hd" или "%hi". Если указать просто "%d" или "%i", то возникнут ошибки конвертирования. Ну, а если значения находятся в диапазоне [0;255], то можно использовать просто char.

Дефолтный размер стека, как и везде, ограничен в 8 Мбайт, из них уже как минимум заняты 2864 байт, в результате под свои статические переменные и массивы остаётся 8385744 байт (после переполнения стека по дефолту происходит сегфолт). Напоминаю, что динамические массивы выделяются не в стек. Соответственно, для больших массивов лучше использовать именно malloc(). Впрочем, размер стека также можно менять по желанию. Кстати, величина свободного места в стеке держится на удивление гораздо стабильнее чем на архитектуре x86_64, где один и тот же код может как отработать нормально, так и выпасть в сегфолт. В любом случае, на той же x86_64 по дефолту в стеке ещё меньше места, впрочем, эта разница не превышает 6 Кб. Поэтому, лучше не злоупотреблять стеком, заполняя его больше чем на 7,9 Мб, или принудительно выствлять в коде размер стека.

Прочитано 2163 раз
Другие материалы в этой категории:« Настройка IDE Geany для языка Python

Добавить комментарий

1. Ругательства запрещены
2. Реклама запрещена

Защитный код
Обновить

О нас | Рассылка | Правила сайта | Правила форума | Поиск

При копировании какого-либо контента с сайта, ссылка на источник - ОБЯЗАТЕЛЬНА! В случае несоблюдения данного пункта будет отправлена жалоба на хостинг нарушителя и сайт будет закрыт (или оштрафован) по усмотрению оператора. Верьте в силу копирайта. Основатель портала: Валентин Щербаков 2013 - 2016

Программное обеспечение сайта распространяется по лицензии GNU General Public License.