LINUX.ORG.RU

Можно ли выделить побольше памяти?

 ,


0

1

Кратко суть проблемы:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <wchar.h>
#include <wctype.h>

#define N 65535
#define OUTBUF 65535 // работает только если уменьшить в двое

wchar_t outbuf[OUTBUF][N];

int main () {
    return 0;
}

gcc 1.c -O2 -o out && ./out 
Ошибка сегментирования

Как увеличить в десятки раз outbuf



Последнее исправление: morkovkin (всего исправлений: 2)

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

увеличь размер стека.

Каким боком тут?

anonymous
()

Смотри документацию по malloc(3)

anonymous
()

Сделай большой своп и выделяй через mmap. Если памяти мало, то будет своппить.

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

и не маллок

Ну ежу понятно. Но есть вариант, что топикстартер о нём просто не знает

anonymous
()

65535 * 65535 * 4 байт? Ну удачи, чо.

Deleted
()

Если тебе нужны статические 8-16Гб вчаров, значит что-то ты делаешь не так. Какая задача у тебя?

Как увеличить в десятки раз outbuf

Уменьшить N в тысячи раз, например.

arturpub ★★
()
Последнее исправление: arturpub (всего исправлений: 1)

УМВР (FreeBSD amd64, gcc и clang). Вообще ничего такого в том чтобы выделить дофига неинициализированной памяти нет - в итоге это обычный mmap(MAP_ANON).

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

Если тебе нужны статические 8-16Гб вчаров, значит что-то ты делаешь не так. Какая задача у тебя?

Огромный текстовый файл 520 Гб нужно прочитать и найти наиболее повторяющиеся предложения. Но это только часть задачи, превел просто для общего понимания.

Спасибо за ответы!

morkovkin
() автор топика
Ответ на: комментарий от i-rinat

Не, если увеличить размер массива до 32G, у меня бинарник тоже начинает падать, правда с SIGABRT. Но mmap руками нормально мапит до 64T включительно - дальше уже наверное какие-то заморочки с адресным пространством. Но что не так с большим массивом в .bss я не понимаю.

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

Да, похоже на что-то такое, и под FreeBSD тоже.

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

Огромный текстовый файл 520 Гб нужно прочитать и найти наиболее повторяющиеся предложения.

и зачем там многомерные массивы wchar`ов ?

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

Не, понимаю. Собсно да, если не это то возможно overcommit - FreeBSD по умолчанию на это не смотрит.

% limit datasize
datasize        32768MB

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

Может в линуксе там жесткое ограничение на размер памяти выделяемой на .bss секцию

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

mashina ★★★★★
()
Последнее исправление: mashina (всего исправлений: 1)
Ответ на: комментарий от morkovkin

Огромный текстовый файл 520 Гб нужно прочитать и найти наиболее повторяющиеся предложения. Но это только часть задачи, превел просто для общего понимания.

Ммапь весь файл целиком, ядро разберётся. Можешь ему помогать с MADV_DONTNEED/WILLNEED из man 2 madvise.

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

Я конечно быдлокодер-птушник, но

найти наиболее повторяющиеся предложения

похоже на lempel-ziv со специфичным, возможно он-диск словарем. Это так, пальцем в небо на всякий случай.

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

параметра overcommit.

Точно, оно. Я всегда думал, что ядро даст выделить сколько угодно, но там по умолчанию 0 стоит, что означает какую-то эвристику. Если поставить в 1, то есть всегда разрешать, то всё нормально запускается.

i-rinat ★★★★★
()
Ответ на: комментарий от morkovkin

Ты решаешь свою задачу неправильно. Читай по частям и обрабатывай по частям. Кроме того, для больших данных существуют алгоритмы работающие во внешней памяти. 520гб тебе все равно в оперативку не влезут, если ты конечно не с суперкомпьютера сюда пишешь.

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

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

Да лан. Террабайтный хард, половину на своп. Делов-то.

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

Да лан. Террабайтный хард, половину на своп. Делов-то.

Если файл заммапить, то даже и своп не нужен.

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