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

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

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

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

18.02.2009, 08:32. Просмотров 905. Ответов 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++
Выделение памяти под строку C++
Выделение памяти под wchar_t C++
Выделение памяти под массив C++
Выделение памяти под переменную в структуре C++
C++ Выделение памяти под структуру
Выделение памяти под указатель C++
Выделение памяти под массивы C++
Выделение памяти под матрицу C++
C++ Выделение памяти под матрицу
Выделение памяти под указатель C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Vourhey
Почетный модератор
6474 / 2249 / 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 ?? или нет?
Yandex
Объявления
19.02.2009, 00:50     Выделение памяти под переменную
Ответ Создать тему
Опции темы

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