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

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

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

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

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

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

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

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

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

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

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

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

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

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

Сколько может выделить malloc - вчистую зависит от настроек ОС. Стандартными средствами узнать не сможешь, только выделяя память до тех пор, пока она перестанет выделаться (что совсем не означает, что память кончилась)
0
Gravity
563 / 557 / 39
Регистрация: 29.01.2009
Сообщений: 1,274
15.07.2009, 22:23 #5
Evg, malloc в качестве параметра принимает значение size_t (unsigned int), как она может выделить больше, чем максимально допустимое значение этого параметра? Я имею ввиду за раз, но естественно никто не запрещает вызывать malloc сколь угодно много раз.
0
Evg
Эксперт CАвтор FAQ
18040 / 6272 / 428
Регистрация: 30.03.2009
Сообщений: 17,254
Записей в блоге: 28
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
Эксперт С++
7158 / 3220 / 59
Регистрация: 17.06.2009
Сообщений: 14,164
16.07.2009, 16:40 #7
Под Windows 32bit не больше 2Gb.
Как узнать сколько можно получить памяти не выделяя ее - не знаю.

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

Добавлено через 42 секунды
Gravity кстати порет чушь.
0
Gravity
563 / 557 / 39
Регистрация: 29.01.2009
Сообщений: 1,274
16.07.2009, 21:37 #8
Цитата Сообщение от odip Посмотреть сообщение
Gravity кстати порет чушь.
Gravity уже понял свою ошибку, а вы не оригинальны.
0
Evg
Эксперт CАвтор FAQ
18040 / 6272 / 428
Регистрация: 30.03.2009
Сообщений: 17,254
Записей в блоге: 28
16.07.2009, 21:40 #9
Цитата Сообщение от Gravity Посмотреть сообщение
Gravity уже понял свою ошибку
Это главное. А остальное - эмоции. И у тебя, и у меня и у odip'а
0
AnonymC
1173 / 455 / 28
Регистрация: 23.06.2009
Сообщений: 6,340
Завершенные тесты: 1
16.07.2009, 23:13 #10
с
Evg не спорить...
0
Rififi
2359 / 1052 / 44
Регистрация: 03.05.2009
Сообщений: 2,656
17.07.2009, 00:09 #11
Как узнать сколько можно получить памяти не выделяя ее - не знаю.
GlobalMemoryStatus[Ex]
0
odip
Эксперт С++
7158 / 3220 / 59
Регистрация: 17.06.2009
Сообщений: 14,164
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
Привет! Вот еще темы с ответами:

Динамическое выделение памяти - C++
Здраствуйте. Собственно сам код и вопрос: почему могу свободно выходить за границы массива? Для чего тогда размерность указывается......

Динамическое выделение памяти - C++
Первый раз столкнулся с такой задачей... Дали лабораторную работу: Разработать приложения, реализующее следующие функции: 1) Выделяет...

Динамическое выделение памяти. - C++
Доброго времени суток. Помогите, пожалуйста, решить задачу. Задача тривиальна - поиск и замена подстроки. Суть в чем: необходимо...

Динамическое выделение памяти - C++
У меня есть двумерный булевый квадратный массив. После запуска программы, я получаю переменную size, это то, сколько элементов должно быть...


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

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

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