|
MMU - сильно ли надо? |
|
|
|
 |
Ответов
|
May 13 2006, 08:49
|

Гуру
     
Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244

|
Цитата(DASM @ May 13 2006, 11:04)  ну это я с переводом лопухнулся. По умолчанию генерируется исключение bad_alloc. Вызовом set_new_handler() мы можем назначить иное поведение. Это по Страуструпу. Ну уж если он некомпетентен.... С этим согласен. Если установить new_handler возвращающий NULL, то new() возвратит результат NULL. Вопросы: 1.Вы когда-нибудь его переустанавливали? 2.Мы обсуждаем поведение new() или того что МОЖНО сделать из new() установкой new_handler, перегрузкой или написанием макроса new ??? Цитата Вот из MSDN "If unsuccessful, new returns zero .... А вот на это "MS" ссылаться не надо. Из того, что у них в Windows на 32 разрядном x86 #define NULL 0 никоем образом не следует, то NULL являющийся абстрактным нулевым _указателем_ может всегда, везде и на всех платформах использоваться как попало и его физическое представление 0. Не говоря о том, что размеры указателя могут ОТЛИЧАТЬСЯ от разрядности ЧИСЛА. И в любом случае писать, что функция которая по определению возвращает УКАЗАТЕЛИ вернула не УКАЗАТЕЛЬ а число 0 (или три или любое другое) некорректно в принципе. Что касается путаницы и самой возможности использовать 0 как NULL, то за это отдельное спасибо авторам С, которые вместо отдельного ключевого слова для нулевого указателя типа паскалевского "nil" использовали ключевое слово "0" :-(. Потом ANSI выкрутились через макрос NULL, который всетаки был в С определен как УКАЗАТЕЛЬ.
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Aug 4 2006, 07:56
|

Гуру
     
Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095

|
Цитата(zltigo @ May 13 2006, 11:49)  А вот на это "MS" ссылаться не надо. Из того, что у них в Windows на 32 разрядном x86 #define NULL 0 никоем образом не следует, то NULL являющийся абстрактным нулевым _указателем_ может всегда, везде и на всех платформах использоваться как попало и его физическое представление 0. А вот тут zltigo не прав. Цитирую Страуструпа: Цитата Ноль (0) имеет тип int. Благодаря стандартным преобразованиям, 0 можно использовать в качестве константы любого интегрального типа, типа с плавающей точокй, указателя или указателя на член класса. Тип нуля определяется по контексту. Ноль, как правило (но не всегда), будет физически представлен в виде последовательности нулевых битов соответствующей длины. Гарантируется, что нет объектов с нулевым адресом. Следовательно, указатель, равный нулю, можно интерпретировать как указатель, который ни на что не ссылается. В языке С было очень популярно определять макрос NULL для представления такого указателя. Так как в С++ типы проверяются более жестко, использование банального нуля вместо NULL приведет к меньшим проблемам. Если вы чувствуете, что просто обязаны определеить NULL, воспользуйтесь Код const int NULL = 0; Модификатор const предотвращает ненамеренное замещение NULL и гарантирует, что NULL можно использовать везде, где требуется константа. Так что ноль вполне законен и даже очень правилен. Кстати, IAR 4.30 после вызова new проверяет R0 на ноль и если не ноль вызывает конструктор. Глубже не копал, но интуитивно понял что new таки в случае неудачи возвращает ноль. Счас отловлю другие ошибки и попробую организовать нехватку памяти.
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
Aug 4 2006, 08:26
|

Гуру
     
Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244

|
Цитата(Сергей Борщ @ Aug 4 2006, 10:56)  А вот тут zltigo не прав. Цитирую Страуструпа: Это всего лишь личное мнение Страуструпа :-)))) который и затвердил :-( его в своей реализации ++. Я не слишком слежу за процессом стандартизации C++, но похоже комитет пока еще не родил стандарта :-(. В моей полной цитате речь шла о проблеме более широко: - не только по отношению к C++, но и к C (более того это был именно кусок по С ); - по отношению к разным платформам, как например должен выглядеть Страуструповский 0 на платформе типа Cray-Cyber с кольцевыми указателями? Короче в С++ болезнь вместо лечения ( введением ключевого слова, как в Паскале) была загнана вовнутрь наложением исскуственного требования иметь внутреннее представление нулевых указателей нулевым. И с легкостью необыкновенной считать, что ключевое слово для нулевого указателя это "0".
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Aug 4 2006, 09:51
|

Гуру
     
Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095

|
Цитата(zltigo @ Aug 4 2006, 11:26)  В моей полной цитате речь шла о проблеме более широко: - не только по отношению к C++, но и к C (более того это был именно кусок по С ); - по отношению к разным платформам, как например должен выглядеть Страуструповский 0 на платформе типа Cray-Cyber с кольцевыми указателями? А разве в С есть operator new? Про Cray не знаю ничего кроме "Цыпленок Cray перебежит дорогу быстрее всех, но если перед стартом его не окунуть в жидкий азот, то на той стороне дороги он появится в уже зажаренном виде" :-) На другой платформе int 0 будет стандартно преобразован к принятому на той платформе битовому представлению указателя который никуда не указывает. По-моему так! (с) Винни-Пух.
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
Сообщений в этой теме
Dimchansky MMU - сильно ли надо? May 12 2006, 08:29 aaarrr Совершенно не нужен, если не планируется использов... May 12 2006, 09:03 Dimchansky Цитата(aaarrr @ May 12 2006, 10:03) Совер... May 12 2006, 09:08  zltigo Цитата(Dimchansky @ May 12 2006, 12:08) Т... May 12 2006, 10:11   Dimchansky Цитата(zltigo @ May 12 2006, 11:11) Тольк... May 12 2006, 10:30   makc Цитата(zltigo @ May 12 2006, 14:11) Тольк... May 12 2006, 10:59    zltigo Цитата(makc @ May 12 2006, 13:59) Если мн... May 12 2006, 11:38     Dimchansky Цитата(zltigo @ May 12 2006, 12:38) Слишк... May 12 2006, 11:43      zltigo Цитата(Dimchansky @ May 12 2006, 14:43) А... May 12 2006, 11:52       Dimchansky Цитата(zltigo @ May 12 2006, 12:52) Без д... May 12 2006, 11:59     dxp Цитата(zltigo @ May 12 2006, 18:38) А вот... May 12 2006, 12:14     makc Цитата(zltigo @ May 12 2006, 15:38) Цитат... May 12 2006, 12:18      Dimchansky Цитата(makc @ May 12 2006, 13:18) MMU в э... May 12 2006, 12:28       makc Цитата(Dimchansky @ May 12 2006, 16:28) Ц... May 12 2006, 14:43        Dimchansky Цитата(makc @ May 12 2006, 15:43) С помощ... May 12 2006, 20:15         makc Цитата(Dimchansky @ May 13 2006, 00:15) Ц... May 13 2006, 05:17 Ruslan1 Цитата(aaarrr @ May 12 2006, 12:03) Совер... May 12 2006, 12:12 aaarrr Да, для этого достаточно просто heap правильно про... May 12 2006, 09:36 Dimchansky Цитата(aaarrr @ May 12 2006, 10:36) Да, д... May 12 2006, 09:36 Dainis MMU нужен инициализыровать если для ARM9 хочется ... May 12 2006, 16:16 DASM Zltigo - не пугайте людей.
new в случае неуспеха в... May 13 2006, 03:37 zltigo Цитата(DASM @ May 13 2006, 06:37) Zltigo ... May 13 2006, 07:08    dxp Цитата(zltigo @ Aug 4 2006, 15:26) Цитата... Aug 4 2006, 09:12     zltigo Цитата(dxp @ Aug 4 2006, 12:12) Какая бол... Aug 4 2006, 10:46      Concorde Цитата(zltigo @ Aug 4 2006, 14:46) Нет, о... Aug 4 2006, 12:07       zltigo Цитата(Concorde @ Aug 4 2006, 15:07) Инте... Aug 4 2006, 13:08      dxp Цитата(zltigo @ Aug 4 2006, 17:46) Цитата... Aug 4 2006, 13:51       zltigo Цитата(dxp @ Aug 4 2006, 16:51) А для при... Aug 4 2006, 16:45 DASM хорошо, если не переустанавливать set_new_handler,... May 13 2006, 10:34 zltigo Цитата(DASM @ May 13 2006, 13:34) Приведи... May 13 2006, 11:07 Alex03 new() практически во всех ранних C++ компиллерах у... May 15 2006, 05:23 zltigo Цитата(Alex03 @ May 15 2006, 08:23) умел ... May 15 2006, 07:23 GetSmart А вот мои 5 рублей.
Мне вот тоже не нравится такое... Aug 5 2006, 01:35
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|