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

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

Войти
Регистрация
Восстановить пароль
 
qpayct
31 / 3 / 1
Регистрация: 16.02.2009
Сообщений: 90
#1

Выделение памяти под переменную - C++

18.02.2009, 08:32. Просмотров 913. Ответов 4
Метки нет (Все метки)

Драсте, уважаемые.
Мне надо выделить переменную на 25мег, чтоб в ней хранить все просчёты выполненые программой. (Пробовал в BCB6 и в BCW 3.1)

Делаю так:
C++
1
2
const long BUF_SIZE = 25600000;
unsigned char buff[BUF_SIZE];
неработает..
и так
C++
1
unsigned char *buff = new[25600000];
Никак не получаеца..
ЧТо не так??
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.02.2009, 08:32
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Выделение памяти под переменную (C++):

Выделение памяти под переменную в структуре - C++
Например есть структура struct StrDL { char Str; char Simv; }; и как выделить память под Str ? Типа этого например ...

Выделение памяти под матрицу - C++
Всем доброго времени суток! Есть такая проблема, у меня есть свой класс Cell. Мне нужно создать матрицу объектов этого типа и выделить под...

Выделение памяти под массивы - C++
int **mas1 = new int*; for (int e = 0; e < q; e++) mas1 = new int; int **mas2 = new int*; for (int q = 0; q < e;...

Выделение памяти под строку - C++
Никак не могу понять, в чем проблема, подскажите пожалуйста. Предположим, инициализирую переменную, ожидая получить строку из 10...

Выделение памяти под файл - C++
Всем доброго времени суток. Написал некоторую структуру, работают все пунктики, все функции, но нашёлся недочёт. Если записывать в файл...

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

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Vourhey
Почетный модератор
6478 / 2253 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
18.02.2009, 10:06 #2
Так че не получается-то?
C++
1
   unsigned char *buff = new unsigned char[25600000];
память нормально выделяется.
qpayct
31 / 3 / 1
Регистрация: 16.02.2009
Сообщений: 90
18.02.2009, 12:21  [ТС] #3
спасибо, разобрался.
НО!
по непонятной мне причине добавляется в память только по 8кб и со временем всё медленнее и медленнее.. что я нетак сделал??
будте добры, поправьте меня.
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
54
55
56
57
58
#include <windows.h>
#include <conio.h>
#include <stdio.h>
#include <iostream.h>
#include <time.h>
#include <alloc.h>
#include <string.h>
#include <stdlib.h>
#pragma hdrstop
#pragma argsused
 
unsigned char buildlist();
unsigned char createdb();
 
unsigned short n[6];
unsigned long ncount=0;
unsigned char tmp[19], *buffer=new unsigned char[16000000];
FILE * filep;
 
WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) {
  clock_t start;
  start=clock();
  strcpy(buffer, "");
  buildlist();
  clock_t end;
  end=clock();
  cout << "timer : " << (end-start) / CLK_TCK << "\n";
  getch();
  return 0;
}
 
unsigned char buildlist() {
  for (n[0]=1; n[0]<30; n[0]++) {
   for (n[1]=n[0]+1; n[1]<31; n[1]++) {
    for (n[2]=n[1]+1; n[2]<32; n[2]++) {
     for (n[3]=n[2]+1; n[3]<33; n[3]++) {
      for (n[4]=n[3]+1; n[4]<34; n[4]++) {
       for (n[5]=n[4]+1; n[5]<35; n[5]++) {
         sprintf(tmp, "%d %d %d %d %d %d!", n[0], n[1], n[2], n[3], n[4], n[5]);
         strcat(buffer, tmp);
         ncount++;
       }
      }
     }
    }
   }
  }
  createdb();
  cout << "Variants : " << ncount << "\n";
  return 0;
}
 
unsigned char createdb() {
  filep = fopen("0002.txt", "a");
  fwrite(buffer, 1, strlen(buffer), filep);
  fclose(filep);
  return 0;
}
YurA_280784
Заблокирован
18.02.2009, 17:58 #4
Во-первых ты все результаты хранишь до записи в оперативе в переменной размерчиком 15,2587890625 Мб, не знаю точно, но по моему с 8 Мб, в оперативу данные уже не пишутся, а начинают сэйвятся в файле подкачки, что значительно снижает скорость заполнения, но эт не твой случай.
Во-вторых у тебя в проге нет отчистки переменной buffer, прикинь каждый раз как начинаешь запускать проэкт(ну отлаживаешь например), у тебя засерается оператива на 15 Мб, т.к с предыдущего шага оператива не отчищена, дык так всю мона схавать за разов 20 отладки))), короче delete [] buffer
Ну а в третьих мне кацца что strlen для 15 метров не оч удачный вариант, уже лучше тогда sizeof(buffer)
qpayct
31 / 3 / 1
Регистрация: 16.02.2009
Сообщений: 90
19.02.2009, 00:50  [ТС] #5
спасибо.
дело в том что первый вариант я написал как раз с самодельным буфером:
C++
1
2
3
4
5
6
7
8
9
sprintf(tmp, "%d %d %d %d %d %d!", n[0], n[1], n[2], n[3], n[4], n[5]);
      nc += strlen(tmp);
      if (nc >= (1004)) {  
        nc = 0;
        strcpy(buffer, "");
      }
          else {
        strcat(buffer, tmp);
      }
выполнялось за 20 сек.
но мне, как раз на другом форуме, посоветовали воспользоваться Buffered I/O функциями и сделать такую вот переменную на 15-25 мег.. и + данные сохранять в бинарный файл, чтоб улучшить быстродействие. Как вы думаете это то, что мне надо?
и ещё вопросик, fwrite это unbuffered I/O ?? или нет?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.02.2009, 00:50
Привет! Вот еще темы с ответами:

Выделение памяти под матрицу - C++
Всем привет. float **AllocMat(int Rows, int Colomns) { float ** Mat; try { Mat = new...

Выделение памяти под матрицу - C++
Существует такой класс: class matr{ public: double **m; // адрес матрицы int mi, my; //стобцы, строки //функции ...

Выделение памяти под указатель - C++
Здравствуйте форумчане,у меня возник маленький вопрос:) Почему sizeof(char) дает результат в 1 байт, а sizeof(char*) ) дает 4 байта.Как...

Выделение памяти под структуру - C++
Наведите пример выделения памяти под структуру


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
19.02.2009, 00:50
Ответ Создать тему
Опции темы

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