|
|
  |
Размер оставшейся "кучи", как определить? |
|
|
|
Oct 26 2006, 12:46
|
Частый гость
 
Группа: Участник
Сообщений: 150
Регистрация: 7-09-05
Из: Россия, г.Новороссийск
Пользователь №: 8 321

|
Цитата(BVU @ Oct 26 2006, 13:32)  Так что IAR здесь как продукт разработки совершенно не причем. Как среда разработки(, компилятор, линкер) - да, может не корректно поставлен вопрос... Реализация, используемых new и delete, скрыта в библиотеках, поставляемых с IAR. Менеджер распредения кучи - там же. Вопрос как раз касается этого менеджера, предоставляющего функции new и delete. Цитата(BVU @ Oct 26 2006, 13:32)  ...поэтому программист сам должен выбрать тот или иной метод ее контроля... Создавать собственный менеджер кучи - задача не оплачиваемая.
|
|
|
|
|
Nov 17 2006, 15:16
|
Частый гость
 
Группа: Участник
Сообщений: 150
Регистрация: 7-09-05
Из: Россия, г.Новороссийск
Пользователь №: 8 321

|
В продолжении темы, может кто встречался с этим: Код unsigned char *buf = NULL; buf = new unsigned char[65535]; if (buf == NULL) { rprintfStr("No such memory...\n\r"); } else { rprintfStr("Delete allocated ...\n\r"); delete[] buf; } НЕ работает, программу клинит при вызове new, если фактически памяти недостаточно. Если new заменяю Код (unsigned char *)malloc(65535); Работает корректно. Никто не подскажет, что это такое и как это побороть?
|
|
|
|
|
Nov 17 2006, 16:02
|

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

|
Цитата(tobias_ivan @ Nov 17 2006, 17:16)  Никто не подскажет, что это такое и как это побороть? Не использовать new() по причине нахренненужности ибо для new() не предусмотрено ошибки возвращать :-). Чаще всего делают тупое ожидание до освобождения памяти или городить к нему exception. Вообще почитайте подробнее про new(). Да и на данном форуме раза три сие уже обсуждалось.
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Nov 20 2006, 10:51
|

Шаман
     
Группа: Модераторы
Сообщений: 3 064
Регистрация: 30-06-04
Из: Киев, Украина
Пользователь №: 221

|
Цитата(tobias_ivan @ Nov 17 2006, 14:16)  ...НЕ работает, программу клинит при вызове new, если фактически памяти недостаточно. Если new заменяю Код (unsigned char *)malloc(65535); Работает корректно. Никто не подскажет, что это такое и как это побороть? Переопределите new() Код void *operator new(size_t sz) { void *p = malloc(sz); return p; }
void *operator new[](size_t sz) { return operator new(sz); }
|
|
|
|
|
Nov 20 2006, 14:24
|
Частый гость
 
Группа: Участник
Сообщений: 150
Регистрация: 7-09-05
Из: Россия, г.Новороссийск
Пользователь №: 8 321

|
Цитата(IgorKossak @ Nov 20 2006, 10:51)  Переопределите new() А как быть с классами? При выделении памяти вызывается конструктор. Мне предложили произвести замену таким образом: Код MyClass *myclass = (MyClass*)malloc(sizeof(MyClass)); if (myclass == NULL) { return error; } myclass->MyConstructor(); Но много перелопачивать надо. Нельзя ли здесь припаять переопределение...?
|
|
|
|
|
Nov 21 2006, 09:14
|
Частый гость
 
Группа: Участник
Сообщений: 150
Регистрация: 7-09-05
Из: Россия, г.Новороссийск
Пользователь №: 8 321

|
Цитата(zltigo @ Nov 20 2006, 18:32)  Цитата(tobias_ivan @ Nov 20 2006, 13:24)  А как быть с ....
Читаем: http://electronix.ru/forum/index.php?showt...hl=new&st=0обращая внимание на set_new_handler() Афигеть, именно это и происходит: Цитата А вот то, что из new не предусмотрен возврат в случае отсутствия памяти, это дополнительный прикол :-) А откуда такая информация?
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|