Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.68/19: Рейтинг темы: голосов - 19, средняя оценка - 4.68
PMike
3 / 3 / 1
Регистрация: 16.04.2009
Сообщений: 127
#1

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

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

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

Cкажите пожалуйста, как узнать каков максимальный объем памяти, который может выделить программа посредством функции malloc?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.07.2009, 20:16
Ответы с готовыми решениями:

Динамическое выделение памяти под структуру (malloc)
Нашел данное решение на этом форуме, но никак не могу понять как оно работает....

Выделение памяти malloc
не работает пример из лекции , там пример на доске такой написан - #include...

Выделение памяти с использованием malloc
Доброго времени суток :) В общем есть следующий класс: class Addres { char...

Выделение памяти malloc realloc
мне задачу поставили, надо не используя stl, загрузить из файла данные. r -...

Выделение памяти malloc приводит к неправильным расчетам
Есть функция которая постоянно вызывается для расчетов. Она работает...

11
Gravity
569 / 563 / 64
Регистрация: 29.01.2009
Сообщений: 1,274
15.07.2009, 20:28 #2
C
1
2
3
4
#include <limits.h>
/* ... */
printf("%u\n", UINT_MAX);
/* ... */
На один вызов функции, и при условии, что в наличие есть такой объем памяти.
1
PMike
3 / 3 / 1
Регистрация: 16.04.2009
Сообщений: 127
15.07.2009, 20:37  [ТС] #3
Т.е. м.б. выделено 2^32 байт памяти?
0
Evg
Эксперт CАвтор FAQ
19271 / 7129 / 527
Регистрация: 30.03.2009
Сообщений: 19,962
Записей в блоге: 30
15.07.2009, 22:19 #4
Цитата Сообщение от Gravity Посмотреть сообщение
C
1
2
3
4
#include <limits.h>
/* ... */
printf("%u\n", UINT_MAX);
/* ... */
На один вызов функции, и при условии, что в наличие есть такой объем памяти.
Враньё чистой воды.

Сколько может выделить malloc - вчистую зависит от настроек ОС. Стандартными средствами узнать не сможешь, только выделяя память до тех пор, пока она перестанет выделаться (что совсем не означает, что память кончилась)
0
Gravity
569 / 563 / 64
Регистрация: 29.01.2009
Сообщений: 1,274
15.07.2009, 22:23 #5
Evg, malloc в качестве параметра принимает значение size_t (unsigned int), как она может выделить больше, чем максимально допустимое значение этого параметра? Я имею ввиду за раз, но естественно никто не запрещает вызывать malloc сколь угодно много раз.
0
Evg
Эксперт CАвтор FAQ
19271 / 7129 / 527
Регистрация: 30.03.2009
Сообщений: 19,962
Записей в блоге: 30
15.07.2009, 22:46 #6
Эм... а при чём тут больше? Просто ты и половину от UINT_MAX выделить не сможешь хотя бы потому, что виртуальная память процесса - она более-менее жёстко расписана, где код с данными, где heap, где область под мапирование и динамические библиотеки, где область под стек. Да и к тому же это под виндами в режиме 32 тип size_t равен unsigned int. По спецификации просто говорится, что есть такой тип size_t, но нигде не говорится, во что этот тип выливается. На 64-битных режимах он в unsigned long выставляется (да и в современных линуксах в режиме 32 тоже unsigned long, ибо по неписанным соглашениям размер long'а равен размеру указателя)
0
odip
Эксперт С++
7161 / 3220 / 76
Регистрация: 17.06.2009
Сообщений: 14,161
16.07.2009, 16:40 #7
Под Windows 32bit не больше 2Gb.
Как узнать сколько можно получить памяти не выделяя ее - не знаю.

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

Добавлено через 42 секунды
Gravity кстати порет чушь.
0
Gravity
569 / 563 / 64
Регистрация: 29.01.2009
Сообщений: 1,274
16.07.2009, 21:37 #8
Цитата Сообщение от odip Посмотреть сообщение
Gravity кстати порет чушь.
Gravity уже понял свою ошибку, а вы не оригинальны.
0
Evg
Эксперт CАвтор FAQ
19271 / 7129 / 527
Регистрация: 30.03.2009
Сообщений: 19,962
Записей в блоге: 30
16.07.2009, 21:40 #9
Цитата Сообщение от Gravity Посмотреть сообщение
Gravity уже понял свою ошибку
Это главное. А остальное - эмоции. И у тебя, и у меня и у odip'а
0
AnonymC
1179 / 462 / 86
Регистрация: 23.06.2009
Сообщений: 6,375
Завершенные тесты: 1
16.07.2009, 23:13 #10
с
Evg не спорить...
0
Rififi
2363 / 1056 / 104
Регистрация: 03.05.2009
Сообщений: 2,656
17.07.2009, 00:09 #11
Как узнать сколько можно получить памяти не выделяя ее - не знаю.
GlobalMemoryStatus[Ex]
0
odip
Эксперт С++
7161 / 3220 / 76
Регистрация: 17.06.2009
Сообщений: 14,161
17.07.2009, 07:56 #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()
0
17.07.2009, 07:56
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.07.2009, 07:56

Выделение памяти через malloc и считывание данных
Здравствуйте. Имеется файл, в котором 6 чисел типа double. В программе имеется...

Распределение памяти. Динамическое выделение памяти
an-1 an-2 ... a2

Динамическое выделение памяти
Добрый день! пытаюсь освоить С++ и дошёл до раздела динамического выделения...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Опции темы

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