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

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

Восстановить пароль Регистрация
 
Iojegg
0 / 0 / 0
Регистрация: 26.10.2010
Сообщений: 11
31.03.2012, 15:42     Выделение памяти системы #1
Добрый день, нужно написать программу, которая выделяет всю память системы. Проблема в том, что при выделении определенного количества памяти программа крашится. подскажите что нужно изменить, чтобы предотвратить краш?
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
#include <iostream>
#include <stdlib.h>
#include <malloc.h>
 
using namespace std;
 
struct MemoryUse
{
       MemoryUse *next;
};
 
int main()
{
    MemoryUse *recent, *first=NULL, *last;
    cout<<"Program for memory allocation\n";
    while(1)
    {
            recent=(MemoryUse*)malloc(13*1024);
            recent->next=NULL;
            if(first==NULL)
                           first=recent;
            else
                last->next=recent;
            last=recent;
    }
    system("pause");
    return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
31.03.2012, 15:42     Выделение памяти системы
Посмотрите здесь:

Выделение памяти C++
C++ Не выделение памяти
Выделение памяти C++
C++ Выделение памяти (new)
Выделение памяти C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
villu
202 / 202 / 4
Регистрация: 06.08.2011
Сообщений: 600
Записей в блоге: 1
31.03.2012, 15:56     Выделение памяти системы #2
C++
1
recent=(MemoryUse*)malloc(13*1024);
вот тут может вернуться NULL
C++
1
recent->next=NULL;
а тут упадет
Iojegg
0 / 0 / 0
Регистрация: 26.10.2010
Сообщений: 11
31.03.2012, 16:06  [ТС]     Выделение памяти системы #3
Большое спасибо, исправил и все заработало. Есть еще пара вопросов, для определения выделенной памяти стоит воспользоваться функцией msize или можно просто в цикле посчитать сколько раз выделяется память и умножить на размер?
villu
202 / 202 / 4
Регистрация: 06.08.2011
Сообщений: 600
Записей в блоге: 1
31.03.2012, 16:11     Выделение памяти системы #4
да можно и посчитать.
Ты только помни, что, например, линукс может вернуть указатель, а страницы памяти начать выделать только при обращении к ним.
Поэтому для гарантированного выделения нужно к памяти обратиться.
А зачем вообще выделять всю память системы? система, кстати этого может и не позволить сделать.
Iojegg
0 / 0 / 0
Регистрация: 26.10.2010
Сообщений: 11
31.03.2012, 16:14  [ТС]     Выделение памяти системы #5
программа для винды. ну и сама программа - лабораторная по ОСям, только выделить всю память, которую система позволит - это часть задания.
villu
202 / 202 / 4
Регистрация: 06.08.2011
Сообщений: 600
Записей в блоге: 1
31.03.2012, 16:16     Выделение памяти системы #6
а ну если для винды, то нужно почитать
http://msdn.microsoft.com/en-us/libr...(v=vs.85).aspx
http://msdn.microsoft.com/en-us/libr...(v=vs.85).aspx
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
31.03.2012, 19:08     Выделение памяти системы
Еще ссылки по теме:

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

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

Или воспользуйтесь поиском по форуму:
Iojegg
0 / 0 / 0
Регистрация: 26.10.2010
Сообщений: 11
31.03.2012, 19:08  [ТС]     Выделение памяти системы #7
Возникли еще трудности, при работе программы на самом деле выделяется ~580 метров на моей системе, а выдается значение в 1945мб.
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
#include <iostream>
#include <stdlib.h>
#include <malloc.h>
 
using namespace std;
 
struct MemoryUse
{
       MemoryUse *next;
};
 
int main()
{
    float MemInMb, k=1, a=1;
    MemoryUse *recent, *first=NULL, *last;
    cout<<"Program for memory allocation\n";
    while(a==1)
    {
            recent=(MemoryUse*)malloc(13*1024);
            if(recent!=NULL)
            {
            recent->next=NULL;
            k++;
            if(first==NULL)
                           first=recent;
            else
                last->next=recent;
            last=recent;
            }
            else a=0;
            cout<<k<<"\n";
    }
    k=k*13;
    MemInMb=k/1024;
    cout<<"Size of memory which was allocated: "<<k<<"kb or "<<MemInMb<<"mb\n";
    system("pause");
    return 0;
}
+не могу найти как сделать так, чтобы приложение определяло время выделения памяти.

Добавлено через 48 минут
Все, это я неправильно смотрел, смотрел только занятую ОП, а память выделялась еще и в файле подкачки...
Yandex
Объявления
31.03.2012, 19:08     Выделение памяти системы
Ответ Создать тему
Опции темы

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