Телесистемы
 Разработка, производство и продажа радиоэлектронной аппаратуры
На главную   | Карта сайта | Пишите нам | В избранное
Требуется программист в Зеленограде
- обработка данных с датчиков; ColdFire; 40 тыс.
e-mail:jobsmp@pochta.ru

Телесистемы | Электроника | Конференция «Микроконтроллеры и их применение»

Тьху, ступил где-то... (+)

Отправлено ReAl 06 сентября 2007 г. 14:45
В ответ на: Интересно, а каковы были мотивы делать size_t знаковым? Понимаю, что вопрос риторический, но может есть объяснение? отправлено <font color=gray>Сергей Борщ</font> 06 сентября 2007 г. 09:25

ещё с ansi_c_89
3.3.3.4 The sizeof operator
...
The value of the result is implementation-defined, and its type (an
unsigned integral type) is size_t defined in the header.

сказано про unsigned для size_t.

А проблема в ptrdiff_t - типе выражения разности двух указателей.
Разность двух указателей, указывающих в пределах одного объекта (а только для таких разность и определена) - штука знаковая. И если ptrdiff_t - не 32-битный (а это расточительно для 16-битной архитектуры в большинстве реальных случаев), то байтовый массив не может быть больше 32767 байт, иначе найдутся два указателя... А поскольку указатель на любой объект можно привести к указателю на байт - то для всех это ограничение работает. Либо ручками соответствующую модель памяти включить.
В случае с IAR, как я понял данное обсуждение, huge_flash только даёт возможность затолкать массив за границу 64К, но не переводит ptrdiff_t на 32-битовое значение.



Составить ответ | Вернуться на конференцию

Ответы


Отправка ответа
Имя*: 
Пароль: 
E-mail: 
Тема*:

Сообщение:

Ссылка на URL: 
URL изображения: 

если вы незарегистрированный на форуме пользователь, то
для успешного добавления сообщения заполните поле, как указано ниже:
введите число 69:

Перейти к списку ответов | Конференция | Раздел "Электроника" | Главная страница | Карта сайта

Rambler's Top100 Рейтинг@Mail.ru
 
Web telesys.ru