Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> malloc(), Максимальный размер памяти 
V
    Опции темы
EgorTheBlade
Дата 21.10.2010, 10:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 141
Регистрация: 5.12.2009

Репутация: нет
Всего: -1



Доброе Утро.Какой можно выставить макс объем памяти для malloc() или же new .
У меня что то ругается char *p = (char*)malloc(5000000);
PM MAIL Skype   Вверх
boostcoder
Дата 21.10.2010, 10:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 49
Всего: 110



Цитата(EgorTheBlade @  21.10.2010,  10:08 Найти цитируемый пост)
выставить

как это понимать? выставить где, в ОС ?

Цитата(EgorTheBlade @  21.10.2010,  10:08 Найти цитируемый пост)
ругается

а это как понимать? кто ругается? как ругается?
PM WWW   Вверх
EgorTheBlade
Дата 21.10.2010, 10:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 141
Регистрация: 5.12.2009

Репутация: нет
Всего: -1



да в ОС. ругается сюда malloc.c
Код

  //  allocate memory block
            res = _heap_alloc(size);

PM MAIL Skype   Вверх
Dem_max
Дата 21.10.2010, 10:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1780
Регистрация: 12.4.2007

Репутация: 4
Всего: 39



в настройках проекта указывается - параметр Max Heap Size


--------------------
Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte")
PM MAIL   Вверх
boostcoder
Дата 21.10.2010, 10:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 49
Всего: 110



Цитата(Dem_max @  21.10.2010,  10:16 Найти цитируемый пост)
параметр Max Heap Size 

вы ничего не напутали? smile 
Цитата(EgorTheBlade @  21.10.2010,  10:15 Найти цитируемый пост)
да в ОС

наверное, стОило бы упомянуть о самой ОС smile 
PM WWW   Вверх
EgorTheBlade
Дата 21.10.2010, 10:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 141
Регистрация: 5.12.2009

Репутация: нет
Всего: -1



Win 7 pro.ultimate
PM MAIL Skype   Вверх
boostcoder
Дата 21.10.2010, 10:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 49
Всего: 110



Цитата(EgorTheBlade @ 21.10.2010,  10:20)
Win 7 pro.ultimate

никак.
потому-что это не ОС ругается, а ваш компилятор(похоже на микрософт).
ОС вообще-то, глубоко насрать до того, сколько вы собираетесь выделить. но если у ОС не окажется столько свободной памяти, она вам вернет 0.

Это сообщение отредактировал(а) boostcoder - 21.10.2010, 10:23
PM WWW   Вверх
EgorTheBlade
Дата 21.10.2010, 10:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 141
Регистрация: 5.12.2009

Репутация: нет
Всего: -1



Если это компилятор то как увеличить размер памяти?
PM MAIL Skype   Вверх
boostcoder
Дата 21.10.2010, 10:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 49
Всего: 110



Цитата(EgorTheBlade @ 21.10.2010,  10:24)
Если это компилятор то как увеличить размер памяти?

а это уже вопрос к виндузятникам.

Добавлено через 42 секунды
ну и может поясните, какое сообщение вы получаете, и что в нем говорится?
PM WWW   Вверх
Dem_max
Дата 21.10.2010, 10:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1780
Регистрация: 12.4.2007

Репутация: 4
Всего: 39



вот тут например
user posted image


--------------------
Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte")
PM MAIL   Вверх
EgorTheBlade
Дата 21.10.2010, 10:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 141
Регистрация: 5.12.2009

Репутация: нет
Всего: -1



runtime_error at memory location и указывает на      res = _heap_alloc(size); В malloc.c

Добавлено через 3 минуты
Цитата(Dem_max @  21.10.2010,  10:31 Найти цитируемый пост)
вот тут например

где ето в находится в свойствах проекта?
PM MAIL Skype   Вверх
Dem_max
Дата 21.10.2010, 10:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1780
Регистрация: 12.4.2007

Репутация: 4
Всего: 39



не знаю в каждом компиляторе по разному


--------------------
Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte")
PM MAIL   Вверх
icecrashldr
Дата 21.10.2010, 10:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Developer
*


Профиль
Группа: Участник
Сообщений: 122
Регистрация: 5.7.2010

Репутация: нет
Всего: нет



HeapAlloc, VirtualAlloc, VirtualAllocEx
MapViewOfFile(минимальная нагрузка на память )
PM MAIL WWW   Вверх
boostcoder
Дата 21.10.2010, 10:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 49
Всего: 110



Цитата(EgorTheBlade @  21.10.2010,  10:32 Найти цитируемый пост)
runtime_error at memory location

говорит о ошибке в рантайм. при чем тут компилятор?

PM WWW   Вверх
Dem_max
Дата 21.10.2010, 10:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1780
Регистрация: 12.4.2007

Репутация: 4
Всего: 39



может действительно ошибка не в выделении памяти а при работе с этой выделенной памятью


--------------------
Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte")
PM MAIL   Вверх
boostcoder
Дата 21.10.2010, 10:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 49
Всего: 110



Dem_max, еще как вариант, ошибка может возникать при выделении памяти. но к примеру, память ужасно фрагментирована, и нет непрерывного блока требуемого размера.
можно попробовать запустить программу после ребута системы.
PM WWW   Вверх
Crafty
Дата 21.10.2010, 10:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 319
Регистрация: 3.11.2008

Репутация: 2
Всего: 14



PM MAIL   Вверх
EgorTheBlade
Дата 21.10.2010, 12:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 141
Регистрация: 5.12.2009

Репутация: нет
Всего: -1



Проблема вызывала memcpy(...). Неправильные циклы для данных.
Все решено.Дело закрыто.Malloc() непричем
PM MAIL Skype   Вверх
djamshud
Дата 21.10.2010, 15:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Пердупержденный
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 23.11.2009

Репутация: 8
Всего: 39



boostcoder, "сильная фрагментация" физической памяти никак не может привести к невозможности выделить большой непрерывный кусок виртуальной - она просто будет соткана из множества фрагментов, но предоставлена приложению в виде непрерывного блока.

А еще на разных операционных системах malloc может вести себя по-разному. Например в линупсе по умолчанию память выделяется "лениво", т.е. может быть выделено стопицот мегабайт, а уже при их использовании обнаружится, что память кончилась везде, в т.ч. в свопе, в таком случае за свою грязную работу возьмется ООМкиллер и настучит кому-нибудь по башке.


--------------------
'Cuz I never walk away from what I know is right
Alice Cooper - Freedom
PM   Вверх
boostcoder
Дата 21.10.2010, 15:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 49
Всего: 110



Цитата(djamshud @  21.10.2010,  15:19 Найти цитируемый пост)
она просто будет соткана из множества фрагментов

т.е. вы хотите сказать, что при malloc()`е операционка начнет дефрагментировать память? звучит нелепо. честно.
PM WWW   Вверх
djamshud
Дата 21.10.2010, 15:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Пердупержденный
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 23.11.2009

Репутация: 8
Всего: 39



Я хочу сказать, что физическая память в компе фрагментирована _всегда_. Запустили программу, за ней вторую, первая закончила работу - дырка в памяти, получите и распишитесь. Это тривиальный пример, понятно, что куча программ все время выделяют и отпускают куски памяти - это по возможности оптимизируется ОС и libc, например во время free память уже освобождается, но остается привилегированной для этой рпограммы, но в конечном счете от фрагментаци один фиг никуда не деться.

Это не нелепо, по-другому только либо мега тормоза при онлайн-дефрагментировании памяти, либо крайне неэффективное использование ОЗУ системы.


--------------------
'Cuz I never walk away from what I know is right
Alice Cooper - Freedom
PM   Вверх
boostcoder
Дата 21.10.2010, 15:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 49
Всего: 110



это все понятно.
я лишь хотел сказать то, что свободной памяти в реале может быть больше чем ты хочешь выделить одним куском. но т.к. он фрагментирована, ты получишь NULL.
PM WWW   Вверх
djamshud
Дата 21.10.2010, 16:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Пердупержденный
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 23.11.2009

Репутация: 8
Всего: 39



Не получу я NULL! Потому что, во-первых ленивое выделение памяти, во-вторых своп, в-третьих еще до свопа, при необходимости выделения большого куска виртуальной памяти, совокупном наличии этого места в ОЗУ и отсутствии цельного куска в физическом адресном пространстве ОЗУ, выделенная единым виртуальным куском память физически размажется по всем планкам памяти.

Но! Отчасти вы правы в том смысле, что (при сраничной организации памяти) теоретически может статься так, что очень многие страницы будут заполнены всего по несколько байт - тогда и правда тютю. Но на практике это осуществимо лишь при запуске миллионов процессов. Т.е. никогда :).


--------------------
'Cuz I never walk away from what I know is right
Alice Cooper - Freedom
PM   Вверх
baldina
Дата 21.10.2010, 18:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: 32
Всего: 101



>Но на практике это осуществимо лишь при запуске миллионов процессов.
не совсем smile
в Windows память выделяется (HeapAlloc) внутри блока, предварительно зарезервированного посредством HeapCreate.
в Linux (внутри kmalloc) возможны различные распределители памяти. Например, использование slab аналогично HeapCreate/HeapAlloc.

Все это (немного условно) работает поверх менеджера виртуальной памяти. Ну а поскольку между виртуальной плоской памятью и malloc располагается один и более уровней, вполне возможна ситуация, что при наличии свободной памяти, выделить достаточно большой блок нельзя. Например, выделение памяти блоками по 2K обычно позволяет выделить больше, чем одним вызовом. И это при том, что на каждый блок тратится дополнительная память.
PM MAIL   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1502 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.