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

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

Восстановить пароль Регистрация
 
dobriy
6 / 6 / 0
Регистрация: 05.07.2012
Сообщений: 30
20.04.2013, 01:35     Выделение памяти #1
Всем доброго времени суток!
Пытаюсь сделать связанный список на 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";
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.04.2013, 01:35     Выделение памяти
Посмотрите здесь:

Выделение памяти C++
C++ Выделение памяти
C++ Выделение памяти (new)
Выделение памяти C++
C++ Выделение памяти
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11835 / 6814 / 769
Регистрация: 27.09.2012
Сообщений: 16,887
Записей в блоге: 2
Завершенные тесты: 1
20.04.2013, 06:42     Выделение памяти #2
Цитата Сообщение от dobriy Посмотреть сообщение
программа жрёт 4 гига оперативы
Во-первых, с чего Вы это взяли?
А во-вторых, debug режим всегда кушает больше, так что запускайте р режиме Release и без отладчика.
dobriy
6 / 6 / 0
Регистрация: 05.07.2012
Сообщений: 30
20.04.2013, 13:07  [ТС]     Выделение памяти #3
взял с того что я следил за ней в task manager'е.
З.ы. в релизе откушала всего 3 гига, но отработала, спасибо!) но зреет другой вопрос, откуда 3 гига?
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11835 / 6814 / 769
Регистрация: 27.09.2012
Сообщений: 16,887
Записей в блоге: 2
Завершенные тесты: 1
20.04.2013, 13:12     Выделение памяти #4
У меня 1.5 гб сожрала.
Игорь с++
 Аватар для Игорь с++
429 / 452 / 15
Регистрация: 26.01.2011
Сообщений: 2,029
20.04.2013, 13:32     Выделение памяти #5
и у меня 1.5 тоже сожрала
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11835 / 6814 / 769
Регистрация: 27.09.2012
Сообщений: 16,887
Записей в блоге: 2
Завершенные тесты: 1
20.04.2013, 13:57     Выделение памяти #6
Хотя все правильно. Вы же на x64 архитектуру делаете, поэтому 3гб вышло
Toshkarik
 Аватар для Toshkarik
1139 / 856 / 50
Регистрация: 03.08.2011
Сообщений: 2,381
Завершенные тесты: 1
20.04.2013, 14:11     Выделение памяти #7
100000000 * ( sizeof( int ) + sizeof( void * ))
На 32 разрядной системе должно получится ~800mb, на 64 - ~1200mb.

Добавлено через 11 минут
Забыл про выравнивание про размеру слова, изза этого размер структуры равен 16 байтам, вместо 12. Поэтому получается ~1600mb на 64 разрядной.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.04.2013, 14:33     Выделение памяти
Еще ссылки по теме:

Выделение памяти C++
C++ выделение памяти
Выделение памяти(С = С++) C++

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

Или воспользуйтесь поиском по форуму:
stima
430 / 285 / 16
Регистрация: 22.03.2011
Сообщений: 929
Завершенные тесты: 1
20.04.2013, 14:33     Выделение памяти #8
Не совсем так, Вы все забыли про мета информацию самого malloca. Почитайте про пул памяти.
Yandex
Объявления
20.04.2013, 14:33     Выделение памяти
Ответ Создать тему
Опции темы

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