7 / 7 / 2
Регистрация: 05.07.2012
Сообщений: 30
1

Выделение памяти

20.04.2013, 01:35. Показов 659. Ответов 7
Метки нет (Все метки)

Всем доброго времени суток!
Пытаюсь сделать связанный список на 100кк элементов, но не выделив памяти и под половину, программа жрёт 4 гига оперативы, и как вы поняли намерена сожрать больше. Компилятор настроен на платформу х64 и по моим подсчётам это всё дело должно занять в памяти 1.6 гига, подскажите пожалуйста что я делаю не так?

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
// ConsoleApplication62.cpp : Defines the entry point for the console application.
//
 
#include "stdafx.h"
#include "stdlib.h"
#include "iostream"
#include <ctime>
 
struct Item
{
public: 
    int theProperty; 
    Item* tail;
};
 
void _tmain()
{
    Item* i = nullptr;
    std::cout << sizeof(Item) << "\n";
    Item* list = (Item*)malloc(sizeof(Item));
    list->theProperty = -1;
    list->tail = NULL;
    unsigned start = clock();
    for (int i = 0; i < 100000000; i++)
    {
        Item* temp = (Item*)malloc(sizeof(Item));
        temp->theProperty = rand();
        temp->tail = list;
        list = temp;
    }
 
    std::cout << clock()-start << "\n";
    Item* p = list;
    float result = 0;
    start = clock();
 
    while (p->tail != NULL)
    {
        result += p->theProperty;
        p = p->tail;
    }
 
    std::cout << clock()-start << "\n";
    p = list;
    start = clock();
    while (p->tail != NULL)
    {
        Item* temp = p->tail;
        free(p);
        p = temp;
    }
    std::cout << clock()-start << "\n";
}
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.04.2013, 01:35
Ответы с готовыми решениями:

Распределение памяти. Динамическое выделение памяти
an-1 an-2 ... a2

Выделение памяти, проверка на утечку памяти
Интересуют два вопроса: 1. Правильно ли устроен алгоритм выделения, удаление и запись ячейки...

Выделение памяти
Часто возникает такая проблема, когда конфигурирую проект как Release происходит ошибка выделения...

Выделение памяти.
Значит так.Задача такая. Ввести строки или строку символов. Сколько мы будем вводить символов...

7
Don't worry, be happy
17688 / 10438 / 2015
Регистрация: 27.09.2012
Сообщений: 26,291
Записей в блоге: 1
20.04.2013, 06:42 2
Цитата Сообщение от dobriy Посмотреть сообщение
программа жрёт 4 гига оперативы
Во-первых, с чего Вы это взяли?
А во-вторых, debug режим всегда кушает больше, так что запускайте р режиме Release и без отладчика.
0
7 / 7 / 2
Регистрация: 05.07.2012
Сообщений: 30
20.04.2013, 13:07  [ТС] 3
взял с того что я следил за ней в task manager'е.
З.ы. в релизе откушала всего 3 гига, но отработала, спасибо!) но зреет другой вопрос, откуда 3 гига?
0
Don't worry, be happy
17688 / 10438 / 2015
Регистрация: 27.09.2012
Сообщений: 26,291
Записей в блоге: 1
20.04.2013, 13:12 4
У меня 1.5 гб сожрала.
0
481 / 473 / 63
Регистрация: 26.01.2011
Сообщений: 2,033
20.04.2013, 13:32 5
и у меня 1.5 тоже сожрала
0
Don't worry, be happy
17688 / 10438 / 2015
Регистрация: 27.09.2012
Сообщений: 26,291
Записей в блоге: 1
20.04.2013, 13:57 6
Хотя все правильно. Вы же на x64 архитектуру делаете, поэтому 3гб вышло
0
1179 / 892 / 94
Регистрация: 03.08.2011
Сообщений: 2,461
20.04.2013, 14:11 7
100000000 * ( sizeof( int ) + sizeof( void * ))
На 32 разрядной системе должно получится ~800mb, на 64 - ~1200mb.

Добавлено через 11 минут
Забыл про выравнивание про размеру слова, изза этого размер структуры равен 16 байтам, вместо 12. Поэтому получается ~1600mb на 64 разрядной.
0
502 / 351 / 94
Регистрация: 22.03.2011
Сообщений: 1,112
20.04.2013, 14:33 8
Не совсем так, Вы все забыли про мета информацию самого malloca. Почитайте про пул памяти.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.04.2013, 14:33
Помогаю со студенческими работами здесь

выделение памяти
#include &lt;iostream&gt; using namespace std; class Matrix { int m, n; public: float **M;...

Выделение памяти
int main() { FILE *fIn = NULL, *fOut =NULL; Error EMyError; CNodeStack *Start; CNodeStack...

Выделение памяти
Нубский вопрос, но не могу до конца разобраться. Допустим, есть простое определение переменной: ...

выделение памяти
Здравствуйте, помогите пожалуйста исправить ошибку, это лишь малая часть кода. В задании: поле...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru