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

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

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

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

Cкажите пожалуйста, как узнать каков максимальный объем памяти, который может выделить программа посредством функции malloc?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
15.07.2009, 20:16
Ответы с готовыми решениями:

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

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

Выделение памяти malloc
Подскажите как мне выделить два массива через malloc, пробою вот так #include <iostream>...

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

11
576 / 570 / 65
Регистрация: 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
3 / 3 / 1
Регистрация: 16.04.2009
Сообщений: 127
15.07.2009, 20:37  [ТС] 3
Т.е. м.б. выделено 2^32 байт памяти?
0
Evg
Эксперт CАвтор FAQ
21116 / 8132 / 628
Регистрация: 30.03.2009
Сообщений: 22,447
Записей в блоге: 30
15.07.2009, 22:19 4
Цитата Сообщение от Gravity Посмотреть сообщение
C
1
2
3
4
#include <limits.h>
/* ... */
printf("%u\n", UINT_MAX);
/* ... */
На один вызов функции, и при условии, что в наличие есть такой объем памяти.
Враньё чистой воды.

Сколько может выделить malloc - вчистую зависит от настроек ОС. Стандартными средствами узнать не сможешь, только выделяя память до тех пор, пока она перестанет выделаться (что совсем не означает, что память кончилась)
0
576 / 570 / 65
Регистрация: 29.01.2009
Сообщений: 1,274
15.07.2009, 22:23 5
Evg, malloc в качестве параметра принимает значение size_t (unsigned int), как она может выделить больше, чем максимально допустимое значение этого параметра? Я имею ввиду за раз, но естественно никто не запрещает вызывать malloc сколь угодно много раз.
0
Evg
Эксперт CАвтор FAQ
21116 / 8132 / 628
Регистрация: 30.03.2009
Сообщений: 22,447
Записей в блоге: 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
Эксперт С++
7171 / 3229 / 77
Регистрация: 17.06.2009
Сообщений: 14,166
16.07.2009, 16:40 7
Под Windows 32bit не больше 2Gb.
Как узнать сколько можно получить памяти не выделяя ее - не знаю.

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

Добавлено через 42 секунды
Gravity кстати порет чушь.
0
576 / 570 / 65
Регистрация: 29.01.2009
Сообщений: 1,274
16.07.2009, 21:37 8
Цитата Сообщение от odip Посмотреть сообщение
Gravity кстати порет чушь.
Gravity уже понял свою ошибку, а вы не оригинальны.
0
Evg
Эксперт CАвтор FAQ
21116 / 8132 / 628
Регистрация: 30.03.2009
Сообщений: 22,447
Записей в блоге: 30
16.07.2009, 21:40 9
Цитата Сообщение от Gravity Посмотреть сообщение
Gravity уже понял свою ошибку
Это главное. А остальное - эмоции. И у тебя, и у меня и у odip'а
0
1182 / 467 / 87
Регистрация: 23.06.2009
Сообщений: 6,390
16.07.2009, 23:13 10
с
Evg не спорить...
0
MCSD: APP BUILDER
8787 / 1065 / 104
Регистрация: 17.06.2006
Сообщений: 12,604
17.07.2009, 00:09 11
Как узнать сколько можно получить памяти не выделяя ее - не знаю.
GlobalMemoryStatus[Ex]
0
Эксперт С++
7171 / 3229 / 77
Регистрация: 17.06.2009
Сообщений: 14,166
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
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
17.07.2009, 07:56

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

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

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

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

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


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

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

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