реклама на сайте
подробности

 
 
> MMU - сильно ли надо?
Dimchansky
сообщение May 12 2006, 08:29
Сообщение #1


Участник
*

Группа: Свой
Сообщений: 55
Регистрация: 10-07-05
Пользователь №: 6 685



Люди добрые,

подскажите, насколько нужен MMU, если хотелось бы писать программу на нормальном C++ (не EC++) и использовать простые выделения памяти типа new delete?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
DASM
сообщение May 13 2006, 08:04
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 3 644
Регистрация: 28-05-05
Пользователь №: 5 493



ну это я с переводом лопухнулся. По умолчанию генерируется исключение bad_alloc. Вызовом set_new_handler() мы можем назначить иное поведение. Это по Страуструпу. Ну уж если он некомпетентен.... Вот из MSDN "If unsuccessful, new returns zero or throws an exception; see The new and delete Operators for more information. You can change this default behavior by writing a custom exception-handling routine and calling the _set_new_handler run-time library function with your function name as its argument"
Go to the top of the page
 
+Quote Post
zltigo
сообщение May 13 2006, 08:49
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 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
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Aug 4 2006, 07:56
Сообщение #4


Гуру
******

Группа: Модераторы
Сообщений: 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)
Go to the top of the page
 
+Quote Post
zltigo
сообщение Aug 4 2006, 08:26
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 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
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Aug 4 2006, 09:51
Сообщение #6


Гуру
******

Группа: Модераторы
Сообщений: 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)
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- 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


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 21:57
Рейтинг@Mail.ru


Страница сгенерированна за 0.01484 секунд с 7
ELECTRONIX ©2004-2016