Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.77/13: Рейтинг темы: голосов - 13, средняя оценка - 4.77
435 / 402 / 57
Регистрация: 06.02.2012
Сообщений: 1,384
1

Более 4Gb памяти одним куском

22.12.2012, 09:41. Просмотров 2319. Ответов 22
Метки нет (Все метки)


Решил посмотреть на xe3 64bit. И поставил ее trial на виртуалку.
Каждый из этих примеров отхватывает 8Gb памяти, тут все ок. Т.е. 2 раза по 4 Gb выделяет.
C++
1
2
new int[1000000000];
new int[1000000000];
C++
1
2
realloc(0, 4000000000);
realloc(0, 4000000000);
А вот отхватить 8Gb одним куском не получается. Не выделяет 8Gb ни так ни так. Вопрос: Как отхватить более 4Gb одним куском?
C++
1
2
new double[1000000000]; // не выделяет
realloc(0, 8000000000); // не выделяет
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.12.2012, 09:41
Ответы с готовыми решениями:

Выделение памяти построчно или куском. Массив C++
Здравствуйте! Привожу следующий код: int H = 20000, W = 20000, y, x; int **rows; ...

Как включить поддержку использования более 4Gb памяти в Windows 7 х86
Как включить поддержку использования более 4Gb памяти в Windows 7, на 32-разрядной операционной...

Что означает: Установлено 4GB памяти, а доступно 2,66?
Здравствуйте, на мой компьютере 4ГБ оперативной памяти, сейчас покажут 2,66 ГБ доступно, это что...

Совместимость оперативной памяти 2GB-1333 и 4GB-1600
Приветствую всех.Сегодня приобрел оперативную память DDR3 на 4 GB - с частотой 1600,в итоге они...

22
Эксперт С++
8354 / 6092 / 610
Регистрация: 10.12.2010
Сообщений: 28,390
Записей в блоге: 29
22.12.2012, 13:57 2
А оперативки то сколько у тебя ?
0
435 / 402 / 57
Регистрация: 06.02.2012
Сообщений: 1,384
22.12.2012, 14:11  [ТС] 3
Оперативки хватит 16Gb. Главное первый вариант 2 по 4Gb отхватывает нормально, а вот второй вариант 8Gb одним куском не хочет. Почему?
0
1113 / 784 / 100
Регистрация: 01.02.2011
Сообщений: 1,845
Записей в блоге: 1
22.12.2012, 18:07 4
Попробуй CreateFileMapping
Кстати, больше 4гб не получится, т.к. билдер 32битный
0
Эксперт С++
8354 / 6092 / 610
Регистрация: 10.12.2010
Сообщений: 28,390
Записей в блоге: 29
22.12.2012, 18:13 5
Цитата Сообщение от kzru_hunter Посмотреть сообщение
Кстати, больше 4гб не получится, т.к. билдер 32битный
Цитата Сообщение от gumi250 Посмотреть сообщение
Решил посмотреть на xe3 64bit.
Ну может и сюда заглянуть стоит
0
Миниатюры
Более 4Gb памяти одним куском  
1113 / 784 / 100
Регистрация: 01.02.2011
Сообщений: 1,845
Записей в блоге: 1
22.12.2012, 18:19 6
Цитата Сообщение от kzru_hunter Посмотреть сообщение
Кстати, больше 4гб не получится, т.к. билдер 32битный
Цитата Сообщение от gumi250 Посмотреть сообщение
Решил посмотреть на xe3 64bit
не заметил.
Цитата Сообщение от gumi250
А вот отхватить 8Gb одним куском не получается
если не ошибаюсь, для этого нужно чтобы в оперативной памяти был сплошной кусок свободного места, поэтому лучше CreateFileMapping использовать
0
Эксперт С++
8354 / 6092 / 610
Регистрация: 10.12.2010
Сообщений: 28,390
Записей в блоге: 29
22.12.2012, 18:22 7
Цитата Сообщение от kzru_hunter Посмотреть сообщение
если не ошибаюсь, для этого нужно чтобы в оперативной памяти был сплошной кусок свободного места
М... а разве Windows не распихивает другие процессы что бы создать это кусок ?
0
435 / 402 / 57
Регистрация: 06.02.2012
Сообщений: 1,384
23.12.2012, 04:40  [ТС] 8
Пробовал увеличить "Heap size maximum" не помогло. CreateFileMapping это несколько не то.
На делфи все работает, 8Gb отхватило.
Pascal
1
2
3
4
5
6
7
procedure TForm1.Button1Click(Sender: TObject);
var
p: ^size_t;
begin
GetMem(p, 8000000000);
end;
end.
Может баг какой, может потом исправят.
0
1113 / 784 / 100
Регистрация: 01.02.2011
Сообщений: 1,845
Записей в блоге: 1
23.12.2012, 08:57 9
Цитата Сообщение от gumi250 Посмотреть сообщение
CreateFileMapping это несколько не то.
почему же?
Цитата Сообщение от gumi250 Посмотреть сообщение
Может баг какой, может потом исправят.
скорее всего нашелся свободный сплошной кусок такой длины
0
Эксперт С++
8354 / 6092 / 610
Регистрация: 10.12.2010
Сообщений: 28,390
Записей в блоге: 29
23.12.2012, 13:04 10
скорее всего нашелся свободный сплошной кусок такой длины
Скорее всего у него не стоит апдейт, или он еще кривой
0
1113 / 784 / 100
Регистрация: 01.02.2011
Сообщений: 1,845
Записей в блоге: 1
23.12.2012, 13:53 11
.....
Другая проблема — это проблема фрагментации памяти. Выделение памяти происходит блоками — непрерывными фрагментами оперативной памяти (таким образом, каждый блок — это несколько идущих подряд байтов). В какой-то момент, в куче попросту может не оказаться блока подходящего размера и, даже, если свободная память достаточна для размещения объекта, операция выделения памяти окончится неудачей.
0
Эксперт С++
8354 / 6092 / 610
Регистрация: 10.12.2010
Сообщений: 28,390
Записей в блоге: 29
23.12.2012, 14:33 12
Откуда цитата ?
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
30862 / 20184 / 7874
Регистрация: 22.10.2011
Сообщений: 35,049
Записей в блоге: 6
23.12.2012, 14:46 13
Из Википедии, вестимо
0
1113 / 784 / 100
Регистрация: 01.02.2011
Сообщений: 1,845
Записей в блоге: 1
23.12.2012, 14:59 14
и без википедии можно понятно
0
Эксперт С++
8354 / 6092 / 610
Регистрация: 10.12.2010
Сообщений: 28,390
Записей в блоге: 29
23.12.2012, 15:20 15
Значит, по идее должен быть способ делать дефрагментацию ?

Добавлено через 14 минут
Стоп!

Если проект "пустой" и мы ранее не выделяли память, то теоретически куча пуста для данного процесса и там нечего дефрагментировать так как память сплошная ... а значит есть все условия для выделения блока памяти такого размера.
0
1113 / 784 / 100
Регистрация: 01.02.2011
Сообщений: 1,845
Записей в блоге: 1
23.12.2012, 15:53 16
Цитата Сообщение от Avazart
Значит, по идее должен быть способ делать дефрагментацию ?
распределением памяти занимается менеджер памяти windows

вот картинка, чтобы было понятно
Более 4Gb памяти одним куском
0
Эксперт С++
8354 / 6092 / 610
Регистрация: 10.12.2010
Сообщений: 28,390
Записей в блоге: 29
23.12.2012, 15:59 17
Цитата Сообщение от Avazart Посмотреть сообщение
М... а разве Windows не распихивает другие процессы что бы создать это кусок ?
Одно дело распределение памяти под процессы, а другое распределение памяти внутри процесса
0
435 / 402 / 57
Регистрация: 06.02.2012
Сообщений: 1,384
24.12.2012, 01:04  [ТС] 18
По моему это ерунда про необходимость непрерывного куска памяти. Ну во-первых под дельфи выделяет без проблем 8Гб одним куском. Во-вторых строение оперативной памяти напоминает строение жеского диска, и там и там память разбита на фрагменты. На хдд-кластеры, в опер.памяти-страницы. Память в обоих случаях выделяется кратно этим кусочкам и состоит из этих кусков, физически куски эти могут разнесены, но программа этого не замечает, ей кажется что кусок памяти выделенный ей непрерывен. Вы представляете сколько весит процессов сейчас в винде, еще куча было закрыто, компы работают месяцами. Если бы ваше предположение про необходимость непрерывного куска было бы верно, то не нашелся бы и кусок в 4Гб, но он без труда находится. Проблемы связаные с кратными цифрами 2, 4Гб имеют как правило другую природу.
0
Эксперт С++
8354 / 6092 / 610
Регистрация: 10.12.2010
Сообщений: 28,390
Записей в блоге: 29
24.12.2012, 01:07 19
Цитата Сообщение от gumi250 Посмотреть сообщение
Ну во-первых под дельфи выделяет без проблем 8Гб одним куском. Во-вторых строение оперативной памяти напоминает строение жеского диска, и там и там память разбита на фрагменты. На хдд-кластеры, в опер.памяти-страницы. Память в обоих случаях выделяется кратно этим кусочкам и состоит из этих кусков, физически куски эти могут разнесены,
Процессы в этой оперативной памяти могут быть разнесены, но ОС может делает дефрагментацию, и даже выпихивать процессы с низким приоритетом в своп.

(когда,как и при каких условиях зависит от ОС и ее алгоритма работы с оперативкой )
0
4197 / 1789 / 211
Регистрация: 24.11.2009
Сообщений: 27,563
24.12.2012, 13:40 20
Цитата Сообщение от kzru_hunter Посмотреть сообщение
Кстати, больше 4гб не получится, т.к. билдер 32битный
32-х битная прога вообще не может получить и 4. Ни за раз, ни за много раз, а ТС утверждает, что в два присеста всё таки получает 8. А под виндой с ядром чикаго вообще ограничение 2 гига на процесс. Причём, считая со статическими и автоматическими переменными и кодом самой проги. Потому что адресных пространств два по 31-му биту, а не одно на все 32, страший бит отвечает за разграничение адресов приложения и адресов для взаимодействия с системой.

Добавлено через 6 минут
Цитата Сообщение от Avazart Посмотреть сообщение
М... а разве Windows не распихивает другие процессы что бы создать это кусок ?
Нет конечно. Это не нужно, так как они в других адресных пространствах и ни один их байт на виртуальные адреса конкретного процесса попасть всё равно не может.

Добавлено через 2 минуты
Цитата Сообщение от kzru_hunter Посмотреть сообщение
вот картинка, чтобы было понятно
Так и запишем: про виртуализацию адресов не слышал. В адресном пространстве конкретного процесса достаточно правильно распределить адреса страниц и вся свободная память в нём будет сплошной.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
24.12.2012, 13:40

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

Разгон памяти Original SAMSUNG DDR-III DIMM 4Gb <PC3-12800>
Материнская плата A75 Pro4-M хочу купить два модуля Original SAMSUNG DDR-III DIMM 4Gb &lt;PC3-12800&gt;...

Для игр и стрима 960 4gb или R9 380 4gb ?
Здравствуйте. Стоит у меня сейчас Radeon HD 6950, но пошли артефакты, своё она отжила и пора...

Zotac gtx680 4Gb. Не видятся эти самые 4Gb
Видеокарта zotac gtx680 4Gb Установил на нее дрова последние. В MSI Kombustor, неправильно...

Посчитать количество записей в 2 и более таблицах одним запросом
На данный момент вот так mysql_query(&quot;SELECT count(a.id_article) as a_count_id_article,...

Проверка существования двух (и более) переменных одним выражением
Возможно ли провести проверку существования 2х переменных при помощи isset(), используя логические...

Mdb не открывается более чем одним пользователем Access2010
база лежит на сервере. С каждого компа открывается по очереди. Но если открыта с одного компа с...


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

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

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