@ProCxx

Страница 2282 из 2477
Alexey
15.08.2018
13:48:09
можно ли как-нибудь проверить свою программу на работу в условиях очень малого доступного объема ОЗУ на linux x86_64? Объем RAM может быть килобайты (стек + куча). Ну и вообще, как-нибудь точно мониторить сколько ОЗУ требуется проге. Или лучше сразу куда-нибудь в эмулятор залезть?

Alexey
15.08.2018
13:50:19
речь идет не про систему целиком, а конкретное приложение в ней

Google
Alexey
15.08.2018
13:50:27
так то памяти десятки гигабайт.

Юра Незнанов
15.08.2018
13:50:47
Alexey
15.08.2018
13:50:48
лимит можно задать setrlimit
я подозреваю, что столь мелкий лимит оно не даст сделать.

Юра Незнанов
15.08.2018
13:50:54
в вижл студии классный очень даже

Alexey
15.08.2018
13:51:07
ну профилировщики памяти для этого есть
а какие из них умеют точно измерять? пусть прога при это и тормозит как угодно сильно.

Юра Незнанов
15.08.2018
13:51:29
но это все в винде

Alexey
15.08.2018
13:51:53
виндов не имею

Egor
15.08.2018
13:51:56
если функция ещё и будет не отрабатывать, как заявлено, то зачем такое программирование

Юра Незнанов
15.08.2018
13:52:15
виндов не имею
ну профилировщики везде есть

Google
Alexey
15.08.2018
13:54:38
у setrlimit вот отдельно RLIMIT_AS, RLIMIT_STACK
спасибо, попробую. а в плане профилировщиков памяти что-нибудь посоветуешь?

Egor
15.08.2018
13:55:11
не пользовался много, знаю в основном только про валгринд

Alexey
15.08.2018
13:57:24
эти лимиты, кстати, довольно зыбкие на самом деле, как я понимаю. в том плане, что в linux же лениво реальная память выделяется. поэтому после new int[100500] памяти будет выделено примерно нуль. До тех пор пока по этой памяти прога не пройдется и странички не потрогает. Если ограничить же адресное пространство (виртуальную память) каким-нибудь мелким значением, то прога не взлетит вовсе, ибо не сможет либы загрузить/свой исполняемый файл в память отобразить.

Alexey
15.08.2018
13:58:54
Спасибо всем. Буду щупать ?

Egor
15.08.2018
14:03:07
откуда сомнения?

Alexey
15.08.2018
14:03:27
отсюда: https://www.kernel.org/doc/Documentation/vm/overcommit-accounting

Egor
15.08.2018
14:03:51
если я запрашиваю, то ожидаю, что выделят при наличии свободной памяти

Alexey
15.08.2018
14:03:59
и из личного опыта

Egor
15.08.2018
14:04:14
возможно, не сталкивался

Alexey
15.08.2018
14:04:16
если я запрашиваю, то ожидаю, что выделят при наличии свободной памяти
в линуксе (и в юниксах вообще) это не так работает

Max
15.08.2018
14:04:47
если я запрашиваю, то ожидаю, что выделят при наличии свободной памяти
Зависит от настроек memory_overcommit и ovecommit_ratio. А также от кучи условий в юзерспейсе.

Google
Stolyarchuk
15.08.2018
14:05:42
new аллоцирует в разделяемой.. туда плюсуется ещё и своп

Alexey
15.08.2018
14:05:53
ЕМНИП, в виндах тоже
в виндах несколько иначе. там malloc таки умеет 0 вернуть.

Stolyarchuk
15.08.2018
14:06:37
наверно

Max
15.08.2018
14:09:12
new аллоцирует в разделяемой.. туда плюсуется ещё и своп
Аллоцирует в виртуальной, в соответствии с выбранными политиками memory managmment'а. Потом, при обращении, выкидывает, если отмапить в реальную, с учётом свопа, уже нельзя.

Другое дело, что new должен ещё и конструкторы вызвать, т.е. обращение должно быть сразу.

Egor
15.08.2018
14:09:50
какой сигнал?

segv?

Max
15.08.2018
14:10:20
какой сигнал?
да, конечно.

Alexey
15.08.2018
14:10:56
Другое дело, что new должен ещё и конструкторы вызвать, т.е. обращение должно быть сразу.
если это не что-то примитивное. а new бывает и для примитивного.

Max
15.08.2018
14:17:03
а не vagrant?
нее. Vagrant - это ж для управления виртуальными машинами )

а не vagrant?
http://valgrind.org/docs/manual/ms-manual.html

Alexey
15.08.2018
14:17:22
просто в хабрастетье про вагрант пишут. может очепятка конечно

Max
15.08.2018
14:22:40
точно? виртуальной памяти же нет как таковой.. это сумма резидентной + кучи и ещё чего там ещё
Неточно, но близко к истине ) С vm.overcommit_memory, выставленным в OVERCOMMIT_GUESS , выделяется столько, сколько может адресоваться в принципе (48 бит в x86, если не ошибаюсь). Но при обращении к невлазящим страницам вылетит sigsegv.

Stolyarchuk
15.08.2018
14:24:46
у меня везде vm.overcommit_memory = 0 по дефолту

наверно незря

Max
15.08.2018
14:25:05
Google
Max
15.08.2018
14:25:37
у меня везде vm.overcommit_memory = 0 по дефолту
чтоб совсем без оверкоммита - это 2.

Stolyarchuk
15.08.2018
14:26:43
ткрите носом, плз.. где вы эти констатнты смотрите? не в исходниках же ядра?

https://elixir.bootlin.com/linux/v4.2/source/include/uapi/linux/mman.h#L9

нашёл

Alexey
15.08.2018
14:31:58
Max
15.08.2018
14:32:31
ткрите носом, плз.. где вы эти констатнты смотрите? не в исходниках же ядра?
Название констант — откуда-то из исходников, да ) Их значения — из доков: https://www.kernel.org/doc/Documentation/vm/overcommit-accounting

ткрите носом, плз.. где вы эти констатнты смотрите? не в исходниках же ядра?
про управление память в целом — https://www.oracle.com/technetwork/articles/servers-storage-dev/oom-killer-1911807.html

и ещё: http://catap.ru/blog/2009/05/03/about-memory-oom-killer/ http://catap.ru/blog/2009/05/05/about-memory-overcommit-memory/

Alexander
15.08.2018
14:33:47
да любые в принципе измеряют точно
нет. потому что это семплирующие профилировщики. или они уже научились не пропускать аллокации памяти?

Alexander
15.08.2018
14:34:34
в вижле, напомню, именно семплирующий

Юра Незнанов
15.08.2018
14:34:50
ну вижловской да

Alexander
15.08.2018
14:34:58
xperf емнип тоже

Alexander
15.08.2018
14:35:30
вот про heaptrack не помню. могу сказать, что valgrind точно не пропустит, так как он эмулирующий

valgrind + massif кто-то выше упоминал уже

но вообще я бы при первом приближении наверное не сильно парился и началд бы работу с каким-нибудь heaptrack

с высокой частотой снимков

Pavel
15.08.2018
14:40:53
а какие библиотеки для жсона есть? небольшие. кроме rapidjson и nlohmann

Google
Дед Пегас
15.08.2018
14:42:10
Вон, minijson_reader/minijson_writer

Однофайловые =)

Pavel
15.08.2018
14:43:53
callback-based. да я с ума сойду

Alexander
15.08.2018
14:43:54
обожаю однофайловые header-only либы... открывать в IDE

Andrey
15.08.2018
14:46:46
А вот бенчмарки для них на всякий случай https://github.com/miloyip/nativejson-benchmark

Pavel
15.08.2018
14:50:23
jsoncpp
meson and ninja

Igor
15.08.2018
14:52:09
как что-то плохое ?

Страница 2282 из 2477