Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Максимальный размер static-массива 
V
    Опции темы
borisbn
Дата 10.6.2012, 11:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: нет
Всего: 135



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

Недавно потребовалось создать статический массив размером 12.884.901.888 байт (8192*64*48*8*8*sizeof(long long))
Компилятор (вернее линковщик) меня отшил с такими претензиями, однако на борту имеется 16 ГБ памяти, ОС - 64-х разрядная OpenSuse 11.3 x86_64. Версию gcc не помню (он там встроенный) то точно выше 4.5.

Вопрос: такой объём памяти вообще можно выделить ? Если да, то как ?
Спасибо.


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
kuzulis
Дата 10.6.2012, 14:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 154
Регистрация: 5.9.2007

Репутация: нет
Всего: 1



Мож компилятору нужно какие-нить ключики дать, чтобы он не матюкался, а увеличил размер стека скок нужно?

PM MAIL   Вверх
boostcoder
Дата 10.6.2012, 15:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 2
Всего: 110



неплохо бы узнать, что сказал линкер,

PM WWW   Вверх
borisbn
Дата 10.6.2012, 15:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: нет
Всего: 135



Цитата(boostcoder @  10.6.2012,  15:19 Найти цитируемый пост)
неплохо бы узнать, что сказал линкер,

к сожалению, ничего вразумительного:
Цитата
error: ld returned 1 exit status

и фффсё. больше ни одной строчки. ни одного символа...

Цитата(kuzulis @  10.6.2012,  14:57 Найти цитируемый пост)
увеличил размер стека скок нужно?

насколько я знаю, на стеке и в 1000 раз меньше нельзя выделить. В вопросе было 
Цитата(borisbn @  10.6.2012,  11:48 Найти цитируемый пост)
потребовалось создать статический массив




--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
Randajad
Дата 1.7.2012, 13:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 295
Регистрация: 15.3.2012

Репутация: нет
Всего: 8



А в куче выделить память нельзя?
PM MAIL   Вверх
borisbn
Дата 1.7.2012, 13:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: нет
Всего: 135



Цитата(Randajad @  1.7.2012,  13:16 Найти цитируемый пост)
А в куче выделить память нельзя? 

В принципе можно, но я бы хотел на этапе компиляции/линковки знать, что память будет выделена. Не хотелось бы узнать о нехватке памяти в рантайме...
Предлагаю объединить темы - эту и соседнюю - http://forum.vingrad.ru/forum/topic-353866...y2501627/0.html
Причём объединить там (в "Правомерно ли такое"), а эту тему забросить

Это сообщение отредактировал(а) borisbn - 1.7.2012, 13:56


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
volatile
Дата 1.7.2012, 13:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2107
Регистрация: 7.1.2011

Репутация: нет
Всего: 85



Цитата(borisbn @  1.7.2012,  13:52 Найти цитируемый пост)
я бы хотел на этапе компиляции/линковки знать, что память будет выделена

Боюсь что это невозможно в обоих случаях.

PM MAIL   Вверх
borisbn
Дата 1.7.2012, 14:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: нет
Всего: 135



Цитата(volatile @  1.7.2012,  13:56 Найти цитируемый пост)
Боюсь что это невозможно в обоих случаях.

Я, пожалуй, неправильно высказался... Я НЕ хочу в своей программе проверять, выделилась ли память после new. Я хочу, чтобы стандартный загрузчик без моего участия либо выделил память и дал бы моей программе работать, либо сам бы ругнулся на недостаток памяти


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
500mhz
Дата 1.7.2012, 19:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


шайтан
***


Профиль
Группа: Завсегдатай
Сообщений: 1017
Регистрация: 5.5.2008
Где: Киев / Italy

Репутация: нет
Всего: 14



Ну все правильно что линковщик отшил, вы же хотите получить память как неинициализированную (ну типа секция .bss хотя название может быть другим), и эта фигня при загрузке файла будет пытатся выделится в адресном пространстве процеса, выделяйте ручками и будет вам счастье )


--------------------

PM MAIL ICQ   Вверх
mes
Дата 1.7.2012, 19:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 1
Всего: 250



Цитата(borisbn @  10.6.2012,  14:45 Найти цитируемый пост)
насколько я знаю, на стеке и в 1000 раз меньше нельзя выделить. В вопросе было 
потребовалось создать статический массив

интересно, а то что программа распухнет минимум на величину вашего массива Вас не смущает ? :winк

Это сообщение отредактировал(а) mes - 1.7.2012, 19:26


--------------------
PM MAIL WWW   Вверх
500mhz
Дата 1.7.2012, 19:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


шайтан
***


Профиль
Группа: Завсегдатай
Сообщений: 1017
Регистрация: 5.5.2008
Где: Киев / Italy

Репутация: нет
Всего: 14



Цитата

интересно, а то что программа распухнет минимум на величину вашего массива Вас не смущает ? :winк



ниче там не распухнет, массив будет определен как НЕИНИЦИАЛИЗИРОВАНЫЙ и занимать в файле будет 0 байт, а вот при загрузке займет все что было указано.


--------------------

PM MAIL ICQ   Вверх
math64
Дата 2.7.2012, 10:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2505
Регистрация: 12.4.2007

Репутация: нет
Всего: 72



У меня 32-разрядная ubuntu, gcc 4.4.5, про массив такого объема сразу выдаёт sizeof array too large. Максимум даёт выделить 2GB (что естестственно для 32-разрядной ОС), но компилируется очень долго. Размер откомпилированного файла - 7K. 
PM   Вверх
math64
Дата 2.7.2012, 11:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2505
Регистрация: 12.4.2007

Репутация: нет
Всего: 72



компилируется на самом деле быстро, долго линкуется. Наверно, создаёт временный файл размером 2GB (в случае borisbn -12GB), а потом обрезает до 7K.
borisbn, у Вас есть столько свободного места?
PM   Вверх
borisbn
Дата 2.7.2012, 16:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: нет
Всего: 135



Цитата(math64 @  2.7.2012,  11:27 Найти цитируемый пост)
у Вас есть столько свободного места? 

Честно говоря, не знаю (с линуксами не дружу). Вот, что выдаёт df

Цитата
linux-dkgu:/ # df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/sdg2              20G  8.8G   10G  47% /
devtmpfs              1.6G  492K  1.6G   1% /dev
tmpfs                 1.6G   16K  1.6G   1% /dev/shm
/dev/sdg3             896G  7.7G  843G   1% /home

Причём, я работаю в каталоге /home/user (т.е. каталог с проектом находится там), но работаю из-под root'а. Если мне доступно только /dev/sdg2, тогда понятно, что тупо не хватает места, если же /dev/sdg3 - то места, как видите, достаточно


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
500mhz
Дата 2.7.2012, 17:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


шайтан
***


Профиль
Группа: Завсегдатай
Сообщений: 1017
Регистрация: 5.5.2008
Где: Киев / Italy

Репутация: нет
Всего: 14



Я понял в чем проблема )))
В заголовке ELF размер секции 4 байтами определяется (при 32битном ельфе) так что туда 12гб по определению не влезут )))



--------------------

PM MAIL ICQ   Вверх
borisbn
Дата 2.7.2012, 17:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: нет
Всего: 135



Цитата(500mhz @  2.7.2012,  17:04 Найти цитируемый пост)
Я понял в чем проблема )))
В заголовке ELF размер секции 4 байтами определяется (при 32битном ельфе) так что туда 12гб по определению не влезут )))

хммм. но у меня 64-х битный линукс. Такой же g++ (я это выяснил путём вывода sizeof( void* ) = 8)
Но вообще-то, очень похоже, т.к. как только я уменьшил размер массива ровно до 4 ГБ - всё стало собираться.
А как тогда сказать g++, чтобы эльф стал 64-х битным ?


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
math64
Дата 3.7.2012, 07:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2505
Регистрация: 12.4.2007

Репутация: нет
Всего: 72



borisbn,  а как у Вас со временем линковки? 
Временные файлы создаются по умолчанию в /var/tmp/ - т.е. в Вашем случае на /dev/sdg2/, но можно переназначить сделав /var/tmp/ символической ссылкой на каталог в /dev/sdg3/ (права доступа должны соответствовать)
Попробуйте создать массив 6GB - если получится (места для него у Вас точно хватит), то заголовок ELF не при чём
PM   Вверх
borisbn
Дата 3.7.2012, 09:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: нет
Всего: 135



Ура!!! Решил.
для gcc нужен ключ -fpic -mcmodel=large
Нашёл тут - http://stackoverflow.com/questions/6296837...th-2-gb-of-code
вот этот ответ - http://stackoverflow.com/a/6297704/667266

Это сообщение отредактировал(а) borisbn - 3.7.2012, 10:22


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
500mhz
Дата 3.7.2012, 10:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


шайтан
***


Профиль
Группа: Завсегдатай
Сообщений: 1017
Регистрация: 5.5.2008
Где: Киев / Italy

Репутация: нет
Всего: 14



И? 12 гб выделяется?


--------------------

PM MAIL ICQ   Вверх
borisbn
Дата 3.7.2012, 10:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: нет
Всего: 135



Цитата(500mhz @  3.7.2012,  10:10 Найти цитируемый пост)
12 гб выделяется? 

во всяком случае программа линкуется без ошибок...
правда, не запускается: у меня временно забрали 16 ГБ... есть только 4... как только вернут - проверю и отпишусь


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
borisbn
Дата 3.7.2012, 13:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: нет
Всего: 135



Блин.... То понос, то золотуха... Теперь у меня линукс не видит больше 4 гигов памяти...
Но это - отдельная тема. Кстати, господа линуксоиды, я её создал - http://forum.vingrad.ru/forum/act-ST/f-135...4/unread-1.html - посмотрите, если не сложно. Спасибо.


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
borisbn
Дата 27.7.2012, 17:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: нет
Всего: 135



P.S. оказывается 
Цитата
-mcmodel=large
Generate code for the large model: This model makes no assumptions about addresses and sizes of sections. Currently GCC does not implement this model.

но, используя -mcmodel=medium всё заработало. 
Код
printf( "size = %d MB\n", sizeof( large_array ) / 1024 / 1024 );

выводит
Цитата
size = 12240  MB



--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | GNU toolchain | Следующая тема »


 




[ Время генерации скрипта: 0.1855 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.