- освобождение памяти, функция free();, Niam, 18:27 , 27-Сен-05 (1)
- освобождение памяти, функция free();, BsDr, 18:53 , 27-Сен-05 (2)
- освобождение памяти, функция free();, enot, 18:58 , 27-Сен-05 (3)
> in = malloc(30000000 * sizeof(int)); Вообще так: in = (int *)malloc(30000000 * sizeof(int)); // 30000000*4=120Мб на 32 разрядной машине.... // 30000000*8=240Мб на 64 разрядной машине....И еще вот так: if (!in) { printf("Ну не могу выделить 120-240Мб памяти.. ну нету...\n") exit(1); } > memset(in, 1, 30000000); Это первые 30Мб из 120Мб.... прикольно ;-) memset заполняет байты а не инты Вот и я думаю, причем тут сложение....
- освобождение памяти, функция free();, Niam, 19:06 , 27-Сен-05 (4)
- освобождение памяти, функция free();, enot, 11:22 , 28-Сен-05 (8)
> >>> memset(in, 1, 30000000); >>Это первые 30Мб из 120Мб.... прикольно ;-) >>memset заполняет байты а не инты > >ну и что?? при вызове free не смотрит что заполнено, а что >нет. > >попробуй заюзать calloc. >в принципе это может быть связано со sleep. попробуй их заменить на >операции ввода. scanf... >и проследить ситуацию, пока будет ожидаться ввод. Да, не смотрит. просто у автора число 30000000 в одном случае относится к выделению интов, в другом к заполнению байтами. видимо переписать надо так memset(in, 1, 30000000*sizeof(int)); Только и всего.
- освобождение памяти, функция free();, Darknode, 19:15 , 27-Сен-05 (5)
- освобождение памяти, функция free();, Ghecko, 20:56 , 27-Сен-05 (6)
- освобождение памяти, функция free();, BsDr, 10:43 , 28-Сен-05 (7)
- освобождение памяти, функция free();, enot, 11:30 , 28-Сен-05 (9)
>>>Причем тут освобождение памяти? юниксы да и не только, как мне всегда >>>казалось не освобождают память...просто free дает сигнал ядру скинуть указатели на >>>память, чтоб этот кусок памяти могли другие использовать... >> Точно, память освобождается только после завершения приложения/процесса. > >На самом деле память ОСВОБОЖДАЕТСЯ: >После заполнения (memset(...) ), памяти выделяется 116Мб. >Затем по истечении 15 с под процесс уже выделенно 1472K, как это >назвать как не освобождением. >А при printf("c: %i\n", a + b); Как было 116Мб так и >осталось 116Мб. Вопрос к автору: проверку после malloc() сделал? Если да, и все равно падает - запускай отладку и т.п. ЗЫ: Жаль у мну FreeBSD под рукой нет..
- освобождение памяти, функция free();, MaximKuznetsov, 11:20 , 29-Сен-05 (12)
|