The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



Вариант для распечатки  
Пред. тема | След. тема 
Форум Программирование под UNIX (C/C++)
Режим отображения отдельной подветви беседы [ Отслеживать ]

Оглавление

освобождение памяти, функция  free();, BsDr (ok), 27-Сен-05, (0) [смотреть все]

Сообщения [Сортировка по времени | RSS]


5. "освобождение памяти, функция  free();"  +/
Сообщение от Darknode (?), 27-Сен-05, 19:15 
>Здорово всем!!!
>Меня интересует функция free() в FreeBsd.
>Ну что тут сложного, вызвал free() и все, например так:
>temp.c:
>#include <stdio.h>
>#include <stdlib.h>
>#include <string.h>
>
>int main()
>{
> int *in;
> int a = 5;
> int b = 4;
> int c;
> in = malloc(30000000 * sizeof(int));
> memset(in, 1, 30000000);
>
> //printf("c: %i\n", a + b);
>
> sleep(15);
> free(in);
> printf("flag_2\n");
> sleep(100);
>}
>Такой вариант кода работает как есть: выделил, заполнил, освободил.
>Если, например сложить а и b то память не освобождается.
>Вот такая "особенность"! Если кто-нибудь с этим сталкивался, то буду весьма благодарен
>за советы!
>Спасибо!!!


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

Ответить | Правка | Наверх | Cообщить модератору

6. "освобождение памяти, функция  free();"  +/
Сообщение от Ghecko (ok), 27-Сен-05, 20:56 
>Причем тут освобождение памяти? юниксы да и не только, как мне всегда
>казалось не освобождают память...просто free дает сигнал ядру скинуть указатели на
>память, чтоб этот кусок памяти могли другие использовать...
Точно, память освобождается только после завершения приложения/процесса.
Ответить | Правка | Наверх | Cообщить модератору

7. "освобождение памяти, функция  free();"  +/
Сообщение от BsDr (ok), 28-Сен-05, 10:43 
>>Причем тут освобождение памяти? юниксы да и не только, как мне всегда
>>казалось не освобождают память...просто free дает сигнал ядру скинуть указатели на
>>память, чтоб этот кусок памяти могли другие использовать...
> Точно, память освобождается только после завершения приложения/процесса.

На самом деле память ОСВОБОЖДАЕТСЯ:
После заполнения (memset(...) ), памяти выделяется 116Мб.
Затем по истечении 15 с под процесс уже выделенно 1472K, как это назвать как не освобождением.
А при printf("c: %i\n", a + b); Как было 116Мб так и осталось 116Мб.

Ответить | Правка | Наверх | Cообщить модератору

9. "освобождение памяти, функция  free();"  +/
Сообщение от enot (??), 28-Сен-05, 11:30 
>>>Причем тут освобождение памяти? юниксы да и не только, как мне всегда
>>>казалось не освобождают память...просто free дает сигнал ядру скинуть указатели на
>>>память, чтоб этот кусок памяти могли другие использовать...
>> Точно, память освобождается только после завершения приложения/процесса.
>
>На самом деле память ОСВОБОЖДАЕТСЯ:
>После заполнения (memset(...) ), памяти выделяется 116Мб.
>Затем по истечении 15 с под процесс уже выделенно 1472K, как это
>назвать как не освобождением.
>А при printf("c: %i\n", a + b); Как было 116Мб так и
>осталось 116Мб.

Вопрос к автору: проверку после malloc() сделал?
Если да, и все равно падает - запускай отладку и т.п.

ЗЫ: Жаль у мну FreeBSD под рукой нет..

Ответить | Правка | Наверх | Cообщить модератору

11. "освобождение памяти, функция  free();"  +/
Сообщение от BsDr (ok), 28-Сен-05, 11:44 
>>>>Причем тут освобождение памяти? юниксы да и не только, как мне всегда
>>>>казалось не освобождают память...просто free дает сигнал ядру скинуть указатели на
>>>>память, чтоб этот кусок памяти могли другие использовать...
>>> Точно, память освобождается только после завершения приложения/процесса.
>>
>>На самом деле память ОСВОБОЖДАЕТСЯ:
>>После заполнения (memset(...) ), памяти выделяется 116Мб.
>>Затем по истечении 15 с под процесс уже выделенно 1472K, как это
>>назвать как не освобождением.
>>А при printf("c: %i\n", a + b); Как было 116Мб так и
>>осталось 116Мб.
>
>Вопрос к автору: проверку после malloc() сделал?
>Если да, и все равно падает - запускай отладку и т.п.
>
>ЗЫ: Жаль у мну FreeBSD под рукой нет..

Да делал: malloc() возвращает не NUUL.
Заметил еще такую тему: если не пользоваться операциями ввода ввывода (пробовал как советовали с gethar()), просто сложить и не печатать, то все нолмально работает.

Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру