Форум программистов, компьютерный форум CyberForum.ru

Как освободить память быстро? - C++

Восстановить пароль Регистрация
 
таня1
 Аватар для таня1
2 / 2 / 0
Регистрация: 13.11.2010
Сообщений: 72
12.12.2011, 11:59     Как освободить память быстро? #1
Функция malloc неправильно работает...Заполняется память быстро,а очищается долго,с чем это связано,кто знает
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
#include<iostream>
#include<malloc.h>
#include<time.h>
#include<windows.h>
#include<conio.h>
using namespace std;
struct node
    {
        void* info;
        node* next;
    };
    int n = 17*1050;
    int i=0;
    node* top,*p,*q;
    time_t start,end ;  
void heap()
    {
    cout<<"\nФункция HeapAlloc()\n";
    p=new node;
    top=p;
    time(&start);
    HANDLE heap=HeapCreate(0l,n,0);
    p->info=HeapAlloc(heap,0,n);
    q=p;
    p=new node;                             
    q->next=p;
    while(p->info=HeapAlloc(heap, 0,n))
    {       
        q=p;    
        p=new node;
        q->next=p;
        i++;
    }
    time(&end);
    p->next=NULL;   
    cout<<"Память заполнена. Объём: "<<i*4<<"Kb Время заполнения: "<<end-start;
    system("pause");
    cout<<"\nПроизводится очищение памяти.";
    p=top;
    time(&start);
    int l=100000;
    while(l>0)
    {
        int a=10000;
        while (a>0)
            a--;
        l--;
    }
    HeapDestroy(heap);
    time(&end);
    cout<<"Память очищена за время: "<<end-start<<endl;
    system("pause");
    }
void mall()
    {
    i=0;
    cout<<"Функция Malloc()"<<endl;
    top=new node;   
    top->info=malloc(n);
    p=top;
    q=top;  
    time(&start);
    p->info=malloc(n);
    p=new node;
    q->next=p;  
    while(p->info=malloc(n))
    {       
        q=p;    
        p=new node;
        q->next=p;
        i++;
    }
 
    time(&end);
        p->next=NULL;
    cout<<"Память заполнена. Объём: "<<i*4<<"Kb Время заполнения: "<<end-start<<"\nПроизводится очищение";
    p=top;
    time(&start);
    cout<<"\ni="<<i<<endl;
    while(i!=0)
    {
        free(p->info);
        p=p->next;  
        i--;
        if(i%1000==0)
        cout<<i<<endl;
    }
    time(&end);
    cout<<"Память очищена за время: "<<end-start<<endl;
    system("pause");
    }
void main()
{   
    setlocale(LC_CTYPE, "Russian");
    int k;
    while(1)
    {
        cout<<"\nМеню:\n1.Функция Malloc().\n2.Функция HeapAlloc().\n";
    k=getch();
    switch (k)
    {
    case 49:mall();break;
    case 50:heap();break;
    }   
    }
 }
посмотрите пожалуйста...
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.12.2011, 11:59     Как освободить память быстро?
Посмотрите здесь:

как освободить память C++
C++ Как правильно освободить память
C++ как освободить память?
Как освободить память в двумерном массиве в столбцах C++
C++ Как правильно освободить память
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Jupiter
Каратель
Эксперт C++
6542 / 3962 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
12.12.2011, 12:09     Как освободить память быстро? #2

Не по теме:

быстро только кошки рожают



Цитата Сообщение от таня1 Посмотреть сообщение
Функция malloc неправильно работает...Заполняется память быстро,а очищается долго
как вы это определили?
таня1
 Аватар для таня1
2 / 2 / 0
Регистрация: 13.11.2010
Сообщений: 72
12.12.2011, 12:31  [ТС]     Как освободить память быстро? #3
Добавлено через 20 минут
додумались
BRcr
 Аватар для BRcr
4003 / 2292 / 155
Регистрация: 03.02.2011
Сообщений: 5,064
Записей в блоге: 10
12.12.2011, 15:22     Как освободить память быстро? #4
Цитата Сообщение от таня1 Посмотреть сообщение
C++
1
2
3
4
5
6
int l=100000; 
while(l>0) { 
  int a=10000; 
  while (a>0) a--; 
  l--; 
}
Вопрос, конечно, нелогичный, но зачем эти 10 000 000 000 операций декрементирования?

Добавлено через 1 час 29 минут
Так-то только HeapAlloc работает сравнительно долго - если убрать упомянутый выше забавный цикл, то
вот вывод программы.
Menu:
1.function Malloc().
2.function HeapAlloc().
function Malloc()
Memory filled, volume is: 450316Kb Time elapsed: 0
Clearing memory...
i=112579
112000
111000
110000
109000
108000
107000
106000
105000
104000
103000
102000
101000
100000
99000
98000
97000
96000
95000
94000
93000
92000
91000
90000
89000
88000
87000
86000
85000
84000
83000
82000
81000
80000
79000
78000
77000
76000
75000
74000
73000
72000
71000
70000
69000
68000
67000
66000
65000
64000
63000
62000
61000
60000
59000
58000
57000
56000
55000
54000
53000
52000
51000
50000
49000
48000
47000
46000
45000
44000
43000
42000
41000
40000
39000
38000
37000
36000
35000
34000
33000
32000
31000
30000
29000
28000
27000
26000
25000
24000
23000
22000
21000
20000
19000
18000
17000
16000
15000
14000
13000
12000
11000
10000
9000
8000
7000
6000
5000
4000
3000
2000
1000
0
Time elapsed for clearing: 0
Для продолжения нажмите любую клавишу . . .

Menu:
1.function Malloc().
2.function HeapAlloc().

function HeapAlloc()
Memory filled, volume is: 427156Kb Time elapsed: 1
Для продолжения нажмите любую клавишу . . .

Clearing memory...Time elapsed for clearing: 0
Для продолжения нажмите любую клавишу . . .
Yandex
Объявления
12.12.2011, 15:22     Как освободить память быстро?
Ответ Создать тему
Опции темы

Текущее время: 20:36. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru