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

 
 
3 страниц V  < 1 2 3 >  
Reply to this topicStart new topic
> MMU - сильно ли надо?
Dimchansky
сообщение May 12 2006, 12:28
Сообщение #16


Участник
*

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



Цитата(makc @ May 12 2006, 13:18) *
MMU в этом случае может очень даже пригодиться, если хочется сделать "дефрагментации" малой кровью.

А как будет в этом случае выглядет дефрагментация?
Go to the top of the page
 
+Quote Post
makc
сообщение May 12 2006, 14:43
Сообщение #17


Гуру
******

Группа: Админы
Сообщений: 3 621
Регистрация: 18-10-04
Из: Москва
Пользователь №: 904



Цитата(Dimchansky @ May 12 2006, 16:28) *
Цитата(makc @ May 12 2006, 13:18) *
MMU в этом случае может очень даже пригодиться, если хочется сделать "дефрагментации" малой кровью.

А как будет в этом случае выглядет дефрагментация?


С помощью MMU можно реализовать непрерывное логическое адресное пространство из нескольких малых физических блоков памяти по разным физическим адресам. Т.е. произвести определяемую менеджером памяти (с функцией дефрагментации) трансляцию логических адресов в физические.


--------------------
BR, Makc
В недуге рождены, вскормлены тленом, подлежим распаду. (с) У.Фолкнер.
Go to the top of the page
 
+Quote Post
Dainis
сообщение May 12 2006, 16:16
Сообщение #18


Местный
***

Группа: Свой
Сообщений: 251
Регистрация: 23-06-04
Пользователь №: 154



MMU нужен инициализыровать если для ARM9 хочется включить Data-Cache.
Go to the top of the page
 
+Quote Post
Dimchansky
сообщение May 12 2006, 20:15
Сообщение #19


Участник
*

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



Цитата(makc @ May 12 2006, 15:43) *
С помощью MMU можно реализовать непрерывное логическое адресное пространство из нескольких малых физических блоков памяти по разным физическим адресам. Т.е. произвести определяемую менеджером памяти (с функцией дефрагментации) трансляцию логических адресов в физические.


Т.е., в приципе, можно и не производить дефрагментацию?
Go to the top of the page
 
+Quote Post
DASM
сообщение May 13 2006, 03:37
Сообщение #20


Гуру
******

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



Zltigo - не пугайте людей.
new в случае неуспеха вернет нулл. 1) "If unsuccessful, new returns zero or throws an exception"
2) " specified in the C++ standard, which is to throw a std::bad_alloc exception if the memory allocation fails"
Go to the top of the page
 
+Quote Post
makc
сообщение May 13 2006, 05:17
Сообщение #21


Гуру
******

Группа: Админы
Сообщений: 3 621
Регистрация: 18-10-04
Из: Москва
Пользователь №: 904



Цитата(Dimchansky @ May 13 2006, 00:15) *
Цитата(makc @ May 12 2006, 15:43) *
С помощью MMU можно реализовать непрерывное логическое адресное пространство из нескольких малых физических блоков памяти по разным физическим адресам. Т.е. произвести определяемую менеджером памяти (с функцией дефрагментации) трансляцию логических адресов в физические.


Т.е., в приципе, можно и не производить дефрагментацию?


В принципе да, но многое будет зависеть от особенностей MMU.


--------------------
BR, Makc
В недуге рождены, вскормлены тленом, подлежим распаду. (с) У.Фолкнер.
Go to the top of the page
 
+Quote Post
zltigo
сообщение May 13 2006, 07:08
Сообщение #22


Гуру
******

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



Цитата(DASM @ May 13 2006, 06:37) *
Zltigo - не пугайте людей.
new в случае неуспеха вернет нулл. 1) "If unsuccessful, new returns zero or throws an exception"
2) " specified in the C++ standard, which is to throw a std::bad_alloc exception if the memory allocation fails"

Господь с авторм приведенной Вами цитаты, но ни при каких условиях new не может возвращать NULL. В 'нормальном' варианте cо свопами и прочими наворотами просто циклится в ожидании появления памяти и в случае если и это не удается - система может просто прибить задачу. В мелких системах, где более-менее сразу ясно, что памяти скорее всего не появится - exeption. В самых примитивных реализациях - просто вечный цикл. Но никак не NULL'.
Ну а то, что автору, цитаты, что NULL, что 'zero' все едино - еще раз указывает на его некомпетентность.



Цитата(makc @ May 13 2006, 08:17) *
В принципе да...

Ага битик включил и "само работать будет" - не будет :-(. Это только механизм, которым можно воспользоваться в менеджере памяти для РЕАЛИЗАЦИИ компенсации фрагментированости.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
DASM
сообщение May 13 2006, 08:04
Сообщение #23


Гуру
******

Группа: Свой
Сообщений: 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
Сообщение #24


Гуру
******

Группа: Свой
Сообщений: 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
DASM
сообщение May 13 2006, 10:34
Сообщение #25


Гуру
******

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



хорошо, если не переустанавливать set_new_handler, то какие пакеты вызовут зацикливание в new а не выброс исключения ? Приведите пожалуйста список, дабы я (а может и еще кто) никогда их (эти пакеты) не использовали
Go to the top of the page
 
+Quote Post
zltigo
сообщение May 13 2006, 11:07
Сообщение #26


Гуру
******

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



Цитата(DASM @ May 13 2006, 13:34) *
Приведите пожалуйста список, дабы я (а может и еще кто) никогда их (эти пакеты) не использовали

Разбираться как ведет себя new() в конкретной библиотеке это задача того, кто решил его использовать.
Я лично - не использую. Мне лет 15-17 назад хватило BCC, дабы отбить сие желание.
Лет пять назад копался в ЧУЖОМ линуксовом приложении которое аккуратно периодически
молча отстреливалось системой как зависшее. Догадались что там было?
Ну и самое главное - чем Вам "exception" буде он реализован во EMBEDDED приложении сильно поможет? А? Типа "перезагрузимся и сделаем вид, что ни ничего не случилось".


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
Alex03
сообщение May 15 2006, 05:23
Сообщение #27


Местный
***

Группа: Свой
Сообщений: 359
Регистрация: 9-12-05
Пользователь №: 12 034



new() практически во всех ранних C++ компиллерах умел возращать NULL.

Многие нынешние компиляторы/библиотеки поддерживают конструкцию:

Код
#include <new>
...
    T* p = new (std::nothrow) T;
    if(!p)
    {
    ... // не дали памяти гады!
    }
Go to the top of the page
 
+Quote Post
zltigo
сообщение May 15 2006, 07:23
Сообщение #28


Гуру
******

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



Цитата(Alex03 @ May 15 2006, 08:23) *
умел возращать NULL
....
Многие поддерживают конструкцию
....

О чем и речь :-(, что кто-то, где-то, как-то...
Посему, либо разбираться конкретно :-( и не забывать о повторных разборках при портировании,
либо устанавливать свой new_handler(), причем единственным разумным вариантом
new_handler() для embedded предстваляется возвращение им NULL для возможности максимально безболезненого выхода из каждого конкретной ситуации.
Либо не использовать new() в принципе.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Aug 4 2006, 07:56
Сообщение #29


Гуру
******

Группа: Модераторы
Сообщений: 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
Сообщение #30


Гуру
******

Группа: Свой
Сообщений: 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

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

 


RSS Текстовая версия Сейчас: 20th July 2025 - 12:42
Рейтинг@Mail.ru


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