Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 27, средняя оценка - 4.85
PMike
3 / 3 / 0
Регистрация: 16.04.2009
Сообщений: 127
#1

Динамическое выделение памяти malloc() - C++

15.07.2009, 20:16. Просмотров 3350. Ответов 11
Метки нет (Все метки)

Здравствуйте!

Cкажите пожалуйста, как узнать каков максимальный объем памяти, который может выделить программа посредством функции malloc?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Gravity
558 / 552 / 39
Регистрация: 29.01.2009
Сообщений: 1,274
15.07.2009, 20:28     Динамическое выделение памяти malloc() #2
C
1
2
3
4
#include <limits.h>
/* ... */
printf("%u\n", UINT_MAX);
/* ... */
На один вызов функции, и при условии, что в наличие есть такой объем памяти.
PMike
3 / 3 / 0
Регистрация: 16.04.2009
Сообщений: 127
15.07.2009, 20:37  [ТС]     Динамическое выделение памяти malloc() #3
Т.е. м.б. выделено 2^32 байт памяти?
Evg
Эксперт CАвтор FAQ
17415 / 5653 / 355
Регистрация: 30.03.2009
Сообщений: 15,478
Записей в блоге: 26
15.07.2009, 22:19     Динамическое выделение памяти malloc() #4
Цитата Сообщение от Gravity Посмотреть сообщение
C
1
2
3
4
#include <limits.h>
/* ... */
printf("%u\n", UINT_MAX);
/* ... */
На один вызов функции, и при условии, что в наличие есть такой объем памяти.
Враньё чистой воды.

Сколько может выделить malloc - вчистую зависит от настроек ОС. Стандартными средствами узнать не сможешь, только выделяя память до тех пор, пока она перестанет выделаться (что совсем не означает, что память кончилась)
Gravity
558 / 552 / 39
Регистрация: 29.01.2009
Сообщений: 1,274
15.07.2009, 22:23     Динамическое выделение памяти malloc() #5
Evg, malloc в качестве параметра принимает значение size_t (unsigned int), как она может выделить больше, чем максимально допустимое значение этого параметра? Я имею ввиду за раз, но естественно никто не запрещает вызывать malloc сколь угодно много раз.
Evg
Эксперт CАвтор FAQ
17415 / 5653 / 355
Регистрация: 30.03.2009
Сообщений: 15,478
Записей в блоге: 26
15.07.2009, 22:46     Динамическое выделение памяти malloc() #6
Эм... а при чём тут больше? Просто ты и половину от UINT_MAX выделить не сможешь хотя бы потому, что виртуальная память процесса - она более-менее жёстко расписана, где код с данными, где heap, где область под мапирование и динамические библиотеки, где область под стек. Да и к тому же это под виндами в режиме 32 тип size_t равен unsigned int. По спецификации просто говорится, что есть такой тип size_t, но нигде не говорится, во что этот тип выливается. На 64-битных режимах он в unsigned long выставляется (да и в современных линуксах в режиме 32 тоже unsigned long, ибо по неписанным соглашениям размер long'а равен размеру указателя)
odip
Эксперт С++
7155 / 3295 / 59
Регистрация: 17.06.2009
Сообщений: 14,164
16.07.2009, 16:40     Динамическое выделение памяти malloc() #7
Под Windows 32bit не больше 2Gb.
Как узнать сколько можно получить памяти не выделяя ее - не знаю.

Кстати - а зачем собственно нужно узнать сколько памяти ?

Добавлено через 42 секунды
Gravity кстати порет чушь.
Gravity
558 / 552 / 39
Регистрация: 29.01.2009
Сообщений: 1,274
16.07.2009, 21:37     Динамическое выделение памяти malloc() #8
Цитата Сообщение от odip Посмотреть сообщение
Gravity кстати порет чушь.
Gravity уже понял свою ошибку, а вы не оригинальны.
Evg
Эксперт CАвтор FAQ
17415 / 5653 / 355
Регистрация: 30.03.2009
Сообщений: 15,478
Записей в блоге: 26
16.07.2009, 21:40     Динамическое выделение памяти malloc() #9
Цитата Сообщение от Gravity Посмотреть сообщение
Gravity уже понял свою ошибку
Это главное. А остальное - эмоции. И у тебя, и у меня и у odip'а
^Tecktonik_KiLLeR
1158 / 440 / 22
Регистрация: 23.06.2009
Сообщений: 6,228
Завершенные тесты: 1
16.07.2009, 23:13     Динамическое выделение памяти malloc() #10
с
Evg не спорить...
Rififi
2336 / 1051 / 44
Регистрация: 03.05.2009
Сообщений: 2,656
17.07.2009, 00:09     Динамическое выделение памяти malloc() #11
Как узнать сколько можно получить памяти не выделяя ее - не знаю.
GlobalMemoryStatus[Ex]
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.07.2009, 07:56     Динамическое выделение памяти malloc()
Еще ссылки по теме:

Динамическое выделение памяти C++
C++ Выделение памяти через malloc и считывание данных
C++ Выделение памяти malloc приводит к неправильным расчетам
C++ Динамическое выделение памяти
Динамическое выделение памяти под структуру (malloc) C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
odip
Эксперт С++
7155 / 3295 / 59
Регистрация: 17.06.2009
Сообщений: 14,164
17.07.2009, 07:56     Динамическое выделение памяти malloc() #12
On computers with more than 4 GB of memory, the GlobalMemoryStatus function can return incorrect information, reporting a value of –1 to indicate an overflow. For this reason, applications should use the GlobalMemoryStatusEx function instead.

Так что только GlobalMemoryStatusEx()
Yandex
Объявления
17.07.2009, 07:56     Динамическое выделение памяти malloc()
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru