PDA

Просмотр полной версии : bash и выделение памяти


12309
19.08.2012, 22:48
$ ls -`for i in {1..100000}; do echo -n l;done`
- нормальный результат, и с количеством нулей до 00000 тоже работает нормально.
добавляем нулей:

$ ls -`for i in {1..1000000}; do echo -n l;done`
bash: /bin/ls: Argument list too long
$ ls -`for i in {1..10000000}; do echo -n l;done`
bash: /bin/ls: Argument list too long

ls'у это уже не нравится, но башу все еще пофиг. добавляем еще нулей, 100000000 и 1000000000, получаем:
$ ls -`for i in {1..100000000}; do echo -n l;done`
ls: cannot access -: No such file or directory
памяти не хватает, и bash прибивается oomkiller'ом, съев где-то 90% оперативы.

а теперь интересное:


$ ls -`for i in {1..10000000000}; do echo -n l;done`
bash: xmalloc: cannot allocate 11280523272 bytes (4538368 bytes allocated)
ls: cannot access -: No such file or directory


баш даже не пытается обсчитать этот цикл, а сразу говорит, что памяти не хватит. но добавим один ноль:
$ ls -`for i in {1..100000000000}; do echo -n l;done`
ls: cannot access -: No such file or directory

баш опять начинает сжирать память и умирать от oomkiller'а, проверил до такого кол-ва нулей (скорее всего это сработает и при большем числе, мне тогда надоело добавлять по одному нулю, дальше я воткнул 4097 нулей и баш наконец-таки сегфолтнулся):
$ ls -`for i in {1..1000000000000000000000000000000000000000000}; do echo -n l;done`
ls: cannot access -: No such file or directory

ну а с
$ ls -`for i in {1..1__тут_4097_нулей__}; do echo -n l;done`
получаем сегфолт
*** glibc detected *** /bin/bash: corrupted double-linked list: 0x00000000006cee00 ***


собственно, мне интересно, почему до определённого числа баш тупо жрёт память, пока не сдохнет, потом на определённом промежутке у него наступает "прозрение" и он сразу говорит о том, что памяти не хватит, а потом опять начинает бездумно жрать память и дохнуть? в сорцы баша просьба не отправлять :)

SynQ
20.08.2012, 11:16
Такие вопросы наверно продуктивнее в mail-list баша отправлять )

12309
20.08.2012, 17:38
да ну, там скажут, что я наркоман, и отправят читать сорцы, а я в си не силён