Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Visual C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.01.2011, 17:28   #11
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

естественно лимиты есть.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 27.01.2011, 18:06   #12
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

2Пепел Феникса

А разве куча, когда она не ограничена явно, не будет использовать весь допустимый объём памяти в системе? Честно говоря не очень сведущ в этом вопросе, если вас не затруднит не могли бы рассказать подробней об ограничениях в сравнении с VirtualAlloc и как они решены в VirtualAlloc?
netrino вне форума Ответить с цитированием
Старый 27.01.2011, 19:29   #13
still_alive
Great Code Monkey
Форумчанин
 
Аватар для still_alive
 
Регистрация: 09.08.2007
Сообщений: 533
По умолчанию

Большой массив? Что такое "большой"?

Цитата:
тем что память выделяется не в куче, и чисто теоритически этот класс может вместить массив в гиг.
Куча она как бы обычно растет, не?
Кроме того, в куче выделяет malloc, а new может выделить и в другой области динамической памяти (реализация new через malloc - это особенность отдельных компиляторов и в общем случае это не так).

Цитата:
она работает вне кучи, поэтому и да и нет.
Пример, когда сработает VirtualAlloc и не сработает new.

Цитата:
А разве куча, когда она не ограничена явно, не будет использовать весь допустимый объём памяти в системе? Честно говоря не очень сведущ в этом вопросе, если вас не затруднит не могли бы рассказать подробней об ограничениях в сравнении с VirtualAlloc и как они решены в VirtualAlloc?
Будет. Скорее уж ограничена VirtualAlloc как более низкоуровневая функция - никак не контролируется фрагментация и требуется гранулярность выделения памяти, что создает определенные проблемы для реализации структур данных, в которых происходит управление большим количеством небольших объектов. Кучами же занимается диспетчер куч и там в этом отношении все получше, но тоже не няшно. Чтобы было няшно, нужно писать собственный распределитель памяти под конкретную задачу.
still_alive вне форума Ответить с цитированием
Старый 27.01.2011, 21:21   #14
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
А разве куча, когда она не ограничена явно, не будет использовать весь допустимый объём памяти в системе? Честно говоря не очень сведущ в этом вопросе, если вас не затруднит не могли бы рассказать подробней об ограничениях в сравнении с VirtualAlloc и как они решены в VirtualAlloc?
вроде б стандартная куча процесса ограничена всегда.
Цитата:
Будет. Скорее уж ограничена VirtualAlloc как более низкоуровневая функция - никак не контролируется фрагментация и требуется гранулярность выделения памяти, что создает определенные проблемы для реализации структур данных, в которых происходит управление большим количеством небольших объектов. Кучами же занимается диспетчер куч и там в этом отношении все получше, но тоже не няшно. Чтобы было няшно, нужно писать собственный распределитель памяти под конкретную задачу
new тоже ограничен фрагментацией!
массив это вам не список
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 27.01.2011, 22:18   #15
still_alive
Great Code Monkey
Форумчанин
 
Аватар для still_alive
 
Регистрация: 09.08.2007
Сообщений: 533
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
вроде б стандартная куча процесса ограничена всегда.
Ограничена. Размером всей доступной памяти. Ибо растет при необходимости.

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
new тоже ограничен фрагментацией!
Если new реализован через кучу, то ежу понятно, что фрагментация так или иначе будет. Но не больше, а зачастую и меньше, нежели при прямом использовании VirtualAlloc. Особенно если использовать такой виндовый механизм, как Low-fragmentation Heap (LFH).

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
массив это вам не список
Буду знать

Так где пример, где VirtualAlloc заруливает все остальное? Расшаренная между процессами память не в счет. Высокая производительность за счет низкоуровневости тоже.
still_alive вне форума Ответить с цитированием
Старый 27.01.2011, 22:36   #16
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
Ограничена. Размером всей доступной памяти. Ибо растет при необходимости.
не припомню такого, надо проверить.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 27.01.2011, 23:09   #17
Obey-Kun
Линуксоид
Участник клуба
 
Аватар для Obey-Kun
 
Регистрация: 31.07.2009
Сообщений: 1,403
По умолчанию

Как-то так:
Цитата:
The largest possible memory block malloc can allocate depends on the host system, particularly the size of physical memory and the operating system implementation. Theoretically, the largest number should be the maximum value that can be held in a size t type, which is an implementation-dependent unsigned integer representing the size of an area of memory. The maximum value is 2^(CHAR_BIT*sizeof(size_t))−1, or the constant SIZE_MAX in the C99 standard.
Нету у malloc'а неочевидных лимитов. И не должно быть. На суперкомпьютерах же нету VirtualAlloc'а, а с БОЛЬШИМИ объёмами динамически выделяемой памяти работать надо.
Я схожу с ума или это глючит реальность?
Jabber ID: obey@obey.su
Obey-Kun вне форума Ответить с цитированием
Старый 07.02.2011, 03:05   #18
kaljan775
:D
Форумчанин
 
Аватар для kaljan775
 
Регистрация: 26.09.2010
Сообщений: 570
По умолчанию

Код:
кстати, разрыл сегодня исходники

void operator delete( void * p )
{
    RTCCALLBACK(_RTC_Free_hook, (p, 0));

    free( p );
}

void operator delete[]( void * p )
{
    RTCCALLBACK(_RTC_Free_hook, (p, 0))

    operator delete(p);
}
Пишу ПО, создаю сайты, делаю курсовые работы, за деньги
C#, .NET, MS SQL, AngularJS, HTML, jQuery
kaljan775 вне форума Ответить с цитированием
Старый 07.02.2011, 08:57   #19
NiCola999
Не
Участник клуба
 
Регистрация: 29.10.2009
Сообщений: 1,456
По умолчанию

что-то вы совсем ушли от вопроса. По теме: в методе push надо увеличивать размер(m_size++) , в pop уменьшать. Ну а метод, возвращающий размер массива будет:
Код:
int size(){ 
   return m_size; 
}
оператор []:
Код:
Type operator[](int index) {
   return (index >= 0 && index <= m_size - 1) ? m_ptr[index] : NULL;   
}
поправьте, если что не так (только встал)

Последний раз редактировалось NiCola999; 07.02.2011 в 09:06.
NiCola999 вне форума Ответить с цитированием
Старый 07.02.2011, 11:06   #20
Obey-Kun
Линуксоид
Участник клуба
 
Аватар для Obey-Kun
 
Регистрация: 31.07.2009
Сообщений: 1,403
По умолчанию

Цитата:
int size(){
return m_size;
}
int size() const тогда уж.
Я схожу с ума или это глючит реальность?
Jabber ID: obey@obey.su
Obey-Kun вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Функции для работы с динамическими массивами iiunbreakableii Общие вопросы Delphi 8 17.07.2012 14:04
Построить класс для работы со списком Васильева Зинаида Помощь студентам 4 30.10.2010 21:10
Класс для работы со стеком(C++).элемент стека-символ. Marusechka Помощь студентам 1 26.09.2010 19:04
класс для работы с обьектом множества Kreaman Помощь студентам 3 26.11.2008 01:02