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

Работа с динамической памятью! - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 20, средняя оценка - 4.95
fba
0 / 0 / 0
Регистрация: 06.06.2009
Сообщений: 14
06.06.2009, 13:06     Работа с динамической памятью! #1
Привет! Такая задача: Необходимо выделить(по N Кб) и освободить всю динамическую память. Определить время выделения и освобождения, и объем памяти. Использовать функции: 1) malloc, free. 2) heapAlloc, heapFree.
Вообще я разбираюсь в программировании, но на С/С++ никогда ничего не писал. Помогите кто в курсе дел.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.06.2009, 13:06     Работа с динамической памятью!
Посмотрите здесь:

C++ C++, операции с динамической памятью.
C++ программа с динамической памятью
C++ Работа с динамической памятью через указатели.
C++ Разобраться в принципе работы задачч. (Работа с динамической памятью через указатели. )
C++ Работа с динамической памятью через указатели. Загадочная ошибка.
Работа с динамической памятью через указатели. Загадочная ошибка. C++
строки: работа с динамической памятью, перегруженные конструкторы C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
fba
0 / 0 / 0
Регистрация: 06.06.2009
Сообщений: 14
08.06.2009, 14:38  [ТС]     Работа с динамической памятью! #21
ха, точно)
только теперь возникает ошибка:
task2.c:9: error: storage size of ‘Head’ isn’t known

т.е. надо как-то изначально задать размер храниища? приравнять к NULL не получается.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Evg
Эксперт С++Автор FAQ
 Аватар для Evg
16935 / 5340 / 328
Регистрация: 30.03.2009
Сообщений: 14,354
Записей в блоге: 26
08.06.2009, 14:43     Работа с динамической памятью! #22
Весь исходник покажи
fba
0 / 0 / 0
Регистрация: 06.06.2009
Сообщений: 14
08.06.2009, 14:48  [ТС]     Работа с динамической памятью! #23
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <stdlib.h>
 
struct Node{
    int  count;
    struct Node *next;
};
typedef struct Node *PNode;
 
struct PNode Head;
 
/*  Pnode CreateNode(char NewWord[]){
   PNode NewNode = new Node;
   strcpy(NewNode->word, NewWord);
   NewNode->count = 1;
   NewNode->next = NULL;
   return NewNode;
}
*/
 
int main(){
 
    return 0;
}
Evg
Эксперт С++Автор FAQ
 Аватар для Evg
16935 / 5340 / 328
Регистрация: 30.03.2009
Сообщений: 14,354
Записей в блоге: 26
08.06.2009, 15:10     Работа с динамической памятью! #24
У тебя нет типа "struct PNode". Есть просто "PNode"
fba
0 / 0 / 0
Регистрация: 06.06.2009
Сообщений: 14
08.06.2009, 15:23  [ТС]     Работа с динамической памятью! #25
блин, может мне вообще эти динамические списки не нужны и есть какой-нить более простой способ? Как уже говорилось - надо выделить всю динамическую память блоками по (к примеру) 80 Кб. После чего освободить и вывести статистику.

Есть какой-нить способ хранить ВСЕ указатели на выделенные блоки, чтоб их потом можно было удалить? проблема в том, что неизвестно сколько этих блоков получится.
Evg
Эксперт С++Автор FAQ
 Аватар для Evg
16935 / 5340 / 328
Регистрация: 30.03.2009
Сообщений: 14,354
Записей в блоге: 26
08.06.2009, 16:05     Работа с динамической памятью! #26
Цитата Сообщение от fba Посмотреть сообщение
Есть какой-нить способ хранить ВСЕ указатели на выделенные блоки, чтоб их потом можно было удалить? проблема в том, что неизвестно сколько этих блоков получится.
Можешь хранить в каком-нибудь динамическом массиве, который так же будешь выделать кусками. осле ого, как весь кусок заполнился, перевыделяешь его (через realloc), либо ведёшь страничную структуру из кусков

Хотя наиболее простым вариантом для твоего случая будет выделять куски, а в начало каждого куска помещать указатель на слудующий. Т.е. вести список, где сами куски являются элементами списка

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
struct Block
{
  struct Block *next;
};
 
...
// Выделение нового куска размером в size байт
struct Block *elem;
 
// Со слишком маленькими кусками работать не будем
if (size < sizeof (struct Block))
  abort ();
 
// Нам до фонаря тот факт, что выделяемый блок имеет размер бОльший, чем наша структура.
// Главное, что мы его выделили и что в начале блока лежит наша структура,
// по которой мы найдём все блоки
elem = malloc (size);
prev_elem->next = elem;
elem->next = NULL;
fba
0 / 0 / 0
Регистрация: 06.06.2009
Сообщений: 14
08.06.2009, 17:11  [ТС]     Работа с динамической памятью! #27
Yeah! Вроде сделал, что требовалось!
А терь есть еще небольшая задачка: Как то, что получилось переделать под heapAlloc и heapFree? Это вообще Си'шные команды?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.06.2009, 17:24     Работа с динамической памятью!
Еще ссылки по теме:

Ошибка с динамической памятью C++
Работа с динамической памятью. Ошибка в функции getline через посимвольный ввод C++
C++ Работа с динамической памятью
Работа с динамической памятью в цикле C++
Почему в данном случае работа с заранее выделенной памятью медленнее чем с динамической? C++

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

Или воспользуйтесь поиском по форуму:
Evg
Эксперт С++Автор FAQ
 Аватар для Evg
16935 / 5340 / 328
Регистрация: 30.03.2009
Сообщений: 14,354
Записей в блоге: 26
08.06.2009, 17:24     Работа с динамической памятью! #28
Что такое heapAlloc и heapFree - смотри тут http://msdn.microsoft.com/en-us/libr...97(VS.85).aspx

Судя по всему это то же самое, но более навороченное. Т.е. сначала ты выделяешь некий дескриптор пул памяти, а потом в этом пуле выделаешь память. Описание не читал, но скорее всего ради того, чтобы потом можно было целиком удалять пул и не заморачиваться с удалением результата каждого malloc'а - все более-менее приличные программы внутре себя содержат подобные менеджеры памяти, а тут они решили это вытащить в ситему

Работать точно так же. Выделяешь один heap, затем в нём делаешь кучу heapMalloc'ов
Yandex
Объявления
08.06.2009, 17:24     Работа с динамической памятью!
Ответ Создать тему
Опции темы

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