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

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

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

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

12.12.2011, 11:59. Просмотров 683. Ответов 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;
    }   
    }
 }
посмотрите пожалуйста...
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.12.2011, 11:59
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Как освободить память быстро? (C++):

Как освободить память? - C++
подскажите как правильно освободить память,спасибо заранее))) #include &quot;stdafx.h&quot; #include &lt;stdio.h&gt; #include &lt;string.h&gt; ...

как освободить память? - C++
Здравствуйте!!! Почему-то никак не освобождается память, выделенная оператором new под двумерный массив типа char,- как только идет...

Как правильно освободить память - C++
Здрасте! (Тема: Шаблоны функций.) Не могу правильно написать метод для освобождения памяти. В мейне делаю все необходимые мне...

Как правильно освободить память - C++
Написал вот такой костыль: wchar_t* getDate() { time_t seconds = time(NULL); tm timeinfo = *(localtime(&amp;seconds)); return...

Как правильно освободить память - C++
Здравствуйте все! Подскажите, как правильно освобождать память, выделенную под массив оператором new? int *Arr = new int; ... delete...

Как правильно освободить память - C++
Есть функция char* md5(const char*). Как освободить память выделенную ею? #include &lt;openssl\md5.h&gt; char* md5(const char* text) { ...

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

Не по теме:

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



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

Как правильно освободить память деструктором? - C++
Не могу понять, как освободить память деструктором... В общем, я объявляю в private динамический массив на 3 элемента, после чего память от...

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

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

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


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
12.12.2011, 15:22
Ответ Создать тему
Опции темы

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