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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 20, средняя оценка - 4.95
fba
0 / 0 / 0
Регистрация: 06.06.2009
Сообщений: 14
#1

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

06.06.2009, 13:06. Просмотров 2520. Ответов 27
Метки нет (Все метки)

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

Работа с динамической памятью - C++
Привет всем. Я недавно начал изучать C++ и наткнулся на ошибку:"двумерный динам.exe вызвал срабатывание точки останова" при очистке...

Работа с динамической памятью в цикле - C++
Всем привет. Есть переменная data, созданная динамически На каждой итерации цикла в нее записывается информация char* data =...

Работа с динамической памятью через указатели. - C++
Пишу в Microsoft Visual Studio ->Win32 Console application ->C++. Есть такая задача: Создать массив из N целых чисел, N вводит...

строки: работа с динамической памятью, перегруженные конструкторы - C++
Привет! Есть задача: Разработать класс String, который в дальнейшем будет использоваться для работы со строками. Класс должен...

Работа с динамической памятью через указатели. Загадочная ошибка. - C++
Программа запускается и нормально исполняется, но в конце появляется ошибка. Мог бы кто подсказать в чем проблема? Пишу в Microsoft...

Работа с динамической памятью через указатели. Загадочная ошибка. - C++
Пишу в Microsoft Visual Studio ->Win32 Console application ->C++. Есть такая задача: Создать массив из N целых чисел, N вводит...

Работа с динамической памятью. Ошибка в функции getline через посимвольный ввод - C++
Было дано вот такое задание: В этой задаче вам необходимо написать функцию getline, которая читает строку из стандартного потока ввода...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
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
Эксперт CАвтор FAQ
17462 / 5700 / 361
Регистрация: 30.03.2009
Сообщений: 15,636
Записей в блоге: 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
Эксперт CАвтор FAQ
17462 / 5700 / 361
Регистрация: 30.03.2009
Сообщений: 15,636
Записей в блоге: 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
Эксперт CАвтор FAQ
17462 / 5700 / 361
Регистрация: 30.03.2009
Сообщений: 15,636
Записей в блоге: 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++
Вот условие задачи: Создать массив из N целых чисел, N вводит пользователь. Заполнить массив случайным образом в диапазоне от 1 до 12....

Почему в данном случае работа с заранее выделенной памятью медленнее чем с динамической? - C++
Написал функцию которая на основе списка выделяет память и при каждом вызове возвращает указатель на следующий элемент для объекта. Код...

Операции с динамической памятью - C++
Есть new и delete. Можно написать так: int *a; a = new int ; Дальше, хотим удалить - пишем delete a; Вопрос такой: а если...

программа с динамической памятью - C++
текст программы #include &lt;iostream&gt; #include &lt;conio.h&gt; #include &lt;stdlib.h&gt; #include &lt;iomanip&gt; #define m 12 using namespace...

Ошибка с динамической памятью - C++
Очень прошу помочь исправить ошибку в области дин.памяти. Проблема: 1. Шаг Создаю массив для записи 2. Шаг удаляю элемент под...


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

Или воспользуйтесь поиском по форуму:
Evg
Эксперт CАвтор FAQ
17462 / 5700 / 361
Регистрация: 30.03.2009
Сообщений: 15,636
Записей в блоге: 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     Работа с динамической памятью!
Ответ Создать тему
Опции темы

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