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

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

Войти
Регистрация
Восстановить пароль
 
dobriy
6 / 6 / 0
Регистрация: 05.07.2012
Сообщений: 30
#1

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

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

Выделение памяти - C++
Доброго всем вечера. В книжке нашел задание: определить класс, представляющий стек. Сделал так, что при заполнении всего стека,...

Выделение памяти(С = С++) - C++
Привет. Нужна помощь, в выделении памяти. Есть код на С, нужно перевести его в С++. int SaveFileOne(int i) { FILE *f; if ((f =...

Выделение памяти... - C++
Вот решил себе ликбез устроить и возникли вопросы: 1) Почему char* p = &quot;fffff&quot;; не реагирует на delete p 2) Когда надо...

До выделение памяти в С++ - C++
Всем приветик. Вообщем есть некоторые сложности с довыделение памяти... Что я хочу сделать: есть 2-х мерный массив (он ещё и квадратный)....

Выделение памяти. - C++
Значит так.Задача такая. Ввести строки или строку символов. Сколько мы будем вводить символов неизвестно.Может быть 10 а может быть...

Выделение памяти - C++
Можно ли сделать так, чтобы в memory выделилась память для 5 int объектов, а затем раздать ее разным переменным? Пытался таким образом и...

Выделение памяти - C++
Скажите пожалуйста что не так? Не могу получить доступ к элементу str = 12, stlb = 3 bool** tempValues = new(bool*); for(int i = 0;...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Croessmah
Модератор
Эксперт CЭксперт С++
12979 / 7291 / 812
Регистрация: 27.09.2012
Сообщений: 18,007
Записей в блоге: 3
Завершенные тесты: 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
Модератор
Эксперт CЭксперт С++
12979 / 7291 / 812
Регистрация: 27.09.2012
Сообщений: 18,007
Записей в блоге: 3
Завершенные тесты: 1
20.04.2013, 13:12     Выделение памяти #4
У меня 1.5 гб сожрала.
Игорь с++
433 / 456 / 16
Регистрация: 26.01.2011
Сообщений: 2,032
20.04.2013, 13:32     Выделение памяти #5
и у меня 1.5 тоже сожрала
Croessmah
Модератор
Эксперт CЭксперт С++
12979 / 7291 / 812
Регистрация: 27.09.2012
Сообщений: 18,007
Записей в блоге: 3
Завершенные тесты: 1
20.04.2013, 13:57     Выделение памяти #6
Хотя все правильно. Вы же на x64 архитектуру делаете, поэтому 3гб вышло
Toshkarik
1139 / 856 / 51
Регистрация: 03.08.2011
Сообщений: 2,384
Завершенные тесты: 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++
Добрый вечер. Немогу никак понять некоторые тонкости выделения памяти. Во первых: на что указывает указатель, при записи char*...

Выделение памяти - C++
Во время выполнения программы после ввода нескольких символов выводит ошибку: double free or corruption(out): 0x0000000001157010 ***...

Выделение памяти - C++
Какой суммарный объем памяти в байтах будут занимать поля CObj всех объектов класса CEx в этой программе: class CEx {public: static...

Выделение памяти - C++
Здравствуйте! #include&lt;iostream&gt; int main() { int *mass = new int ; int *mass2 = new int ; std::cout &lt;&lt; (unsigned int)mass &lt;&lt;...

Выделение памяти - C++
Эта программа должна забрать у системы 10 МБ, но диспетчер задач показывает, что программа забирает 163 МБ. Почему ? ...


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

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

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