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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
таня1
2 / 2 / 0
Регистрация: 13.11.2010
Сообщений: 72
#1

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

12.12.2011, 11:59. Просмотров 671. Ответов 3
Метки нет (Все метки)

Функция 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++
Не могу понять, как освободить память деструктором... В общем, я объявляю в private динамический массив на 3 элемента, после чего память от...

Подскажите пожалуйста, как правильно освободить память - C++
Всем ку! Подскажите пожалуйста, как правильно удалить(освободить память) массива array2D. Array1D&lt;Elem&gt;* array2D = ...

Как освободить память в двумерном массиве в столбцах - C++
скажем так, чтобы освободить строку я пишу int **b; // // инициализирю массив delete b; // удаляю указатель(массив) в 3 позиции ...

Как освободить память из-под вектора объектов? - C++
vector&lt;TObj*&gt; obj; obj.push_back(new obj()); obj.erase(obj.begin()+indx);//удаляю указатель который указывал на объект &quot;Для...

Как освободить память после удаления объекта из вектора - C++
Всем доброго времени суток. Никак не могу понять как освободить память, после удаления объекта из вектора... std::vector&lt;TNetwork*&gt;...

Как правильно освободить память после работы с динамическим массивом - C++
Здравствуйте! Помогите понять в чём проблема при освобождении памяти. Простой пример: #define _CRT_SECURE_NO_WARNINGS #include...

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

Не по теме:

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



Цитата Сообщение от таня1 Посмотреть сообщение
Функция malloc неправильно работает...Заполняется память быстро,а очищается долго
как вы это определили?
таня1
2 / 2 / 0
Регистрация: 13.11.2010
Сообщений: 72
12.12.2011, 12:31  [ТС]     Как освободить память быстро? #3
Добавлено через 20 минут
додумались
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.12.2011, 15:22     Как освободить память быстро?
Еще ссылки по теме:

Как освободить память занимаемую вектором и явно вернуть системе? - C++
Здравствуйте! Вопрос: Как освободить память занимаемую вектором и явно вернуть системе?

Не получается освободить память - C++
Здравствуйте, такая загвоздка, начал изучать указатели и создание динамических массивов, проблема в том что не выходит очистить память в...

Освободить память и записать по новой - C++
Есть массив: char Name; нужно выполнить проверку ввода данных и при надобности освободить память и записать в массив новое значение ...

Освободить память вектора векторов без swap - C++
Собственно будет ли &quot;Swap-To-Fit&quot; std::vector&lt;std::vector&lt;double&gt;&gt; m_coefficients; . . . ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
BRcr
4008 / 2297 / 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     Как освободить память быстро?
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru