LINUX.ORG.RU

[СИ] Создать большой массив

 


0

2

[СИ] Создать большой массив

Ясык СИ
ОС UNIX

Не получается создать массив больше этого:
int arr[15000000];

Это 60 000 000 байт.
А нужно 500 000 000 байт.
Определен в функции main().
Segmentation fault (core dumped)

ОЗУ 4 Гб.
Вызов k=getrlimit(RLIMIT_DATA , &rlim);
дает RLIMIT_DATA: 536870912/536870912

Top дает строку
Mem: 76M Active, 2733M Inact, 257M Wired, 1264K Cache, 112M Buf, 550M Free

Существует ли способ создать большой массив?

Кто знает прошу ответить.


Ответ на: комментарий от Deleted


arsi
Статический массив инициализирован и работает.
и по top-у похоже, что он в памяти.
Как я понимаю, если static это не общее
решение, но для данной задачи правильное.
malloc() я раньше тестил в учебной программе,
но на деле применять не осмелился.
Под опасным я имел в виду утечку памяти.
Видимо надо его освоить. Для начала в
одноразовых программах (не демонах).

Спасибо.

oleg_2
() автор топика
Ответ на: комментарий от oleg_2

ээээ... а как маллок будет провоцировать утечку, если на каждый аллоцированный кусок у тебя будет соответствующий free? где тут опасность?

Deleted
()
Ответ на: комментарий от oleg_2

дай дураку хрустальный х*й, так он и его разобьёт и руки порежет

поддерживаю фракцию malloc, с едиственной оговоркой: используй calloc, дабы избежать int-overflow

beastie ★★★★★
()
Ответ на: комментарий от oleg_2

Если программу можно написать так, что память выделяет только один раз при старте программы, то так её писать и надо и не использовать никаких malloc'ов. Это действительно увеличивает надежность.

Reset ★★★★★
()
Ответ на: комментарий от beastie

> используй calloc, дабы избежать int-overflow

Какой еще int-overflow? Молодой человек, вы о чем говорите?

anonymous
()
Ответ на: комментарий от anonymous

читаем в частности malloc(3), коль наслово не верим, дядя:

     When using malloc() be careful to avoid the following idiom:

           if ((p = malloc(num * size)) == NULL)
                   err(1, "malloc");

     The multiplication may lead to an integer overflow.  To avoid this,
     calloc() is recommended.
а т.к. ТС в этом вопросе не слишком опытный — лучше подстраховаться

beastie ★★★★★
()
Ответ на: комментарий от beastie

Аргумент у malloc'a типа size_t. Если вы сами не можете правильно вычислить значение типа size_t и язык способствует таким ошибкам, то это еще не повод для использования calloc (который к тому же реализует еще и немного отличную от malloc функциональность).

anonymous
()
Ответ на: комментарий от anonymous

ну потеште, поделитесь мудростью, а то так и помру дураком

beastie ★★★★★
()
Ответ на: комментарий от beastie

>используй calloc, дабы избежать int-overflow

ты про sizeof(size_t) = 4 ?

quest ★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.