block1(arrays[0], size[0]);
block2(arrays[1], size[1]);
block3(arrays[2], size[2]);
block4(arrays[3], size[3]);
Помогите поправить срочно
Код:
#include <iostream>
#include <stdio.h>
#include <ctime>
using namespace std;
const int N = 10000;
long size[] = {32,64,128,256};
long *arrays[4];
int blocks = 2048;
long block1(long *arr, int size)
{
long *ptr;
time_t begin, end;
begin = clock();
for(int n=0; n<N; n++)
{
ptr = arr;
for(int i=0; i<blocks*2; i++)
{
ptr = (long*)(*ptr);
}
}
end = clock();
cout << "32kb:"<< end-begin << " ms";
return 0;
}
long block2(long *arr, int size)
{
long *ptr;
time_t begin, end;
begin = clock();
for(int n=0; n<N; n++)
{
ptr = arr;
for(int i=0; i<blocks*4; i++)
{
ptr = (long*)(*ptr);
}
}
end = clock();
cout << "64kb:"<< end-begin << " ms";
return 0;
}
long block3(long *arr, int size)
{
long *ptr;
time_t begin, end;
begin = clock();
for(int n=0; n<N; n++)
{
ptr = arr;
for(int i=0; i<blocks*4; i++)
{
ptr = (long*)(*ptr);
}
}
end = clock();
cout << "128kb:"<< end-begin << " ms";
return 0;
}
long block4(long *arr, int size)
{
long *ptr;
time_t begin, end;
begin = clock();
for(int n=0; n<N; n++)
{
ptr = arr;
for(int i=0; i<blocks*8; i++)
{
ptr = (long*)(*ptr);
}
}
end = clock();
cout << "256kb:"<< end-begin << " ms";
return 0;
}
int main (long *arr, int size) {
// создаёт блоки и инициализирует их согласно условию задачи
for(int i=1; i<5; i++)
{
blocks*=2;
arrays = new long[blocks];
for(int j=0; j<blocks; j++)
arrays[j] = long ( arrays + j + 1 );
}
//запускаем блоки на выполнение и подсчет времени
block1(long *arr, int size);
block2(long *arr, int size);
block3(long *arr, int size);
block4(long *arr, int size);
return 0;
}
#include <stdio.h>
#include <ctime>
using namespace std;
const int N = 10000;
long size[] = {32,64,128,256};
long *arrays[4];
int blocks = 2048;
long block1(long *arr, int size)
{
long *ptr;
time_t begin, end;
begin = clock();
for(int n=0; n<N; n++)
{
ptr = arr;
for(int i=0; i<blocks*2; i++)
{
ptr = (long*)(*ptr);
}
}
end = clock();
cout << "32kb:"<< end-begin << " ms";
return 0;
}
long block2(long *arr, int size)
{
long *ptr;
time_t begin, end;
begin = clock();
for(int n=0; n<N; n++)
{
ptr = arr;
for(int i=0; i<blocks*4; i++)
{
ptr = (long*)(*ptr);
}
}
end = clock();
cout << "64kb:"<< end-begin << " ms";
return 0;
}
long block3(long *arr, int size)
{
long *ptr;
time_t begin, end;
begin = clock();
for(int n=0; n<N; n++)
{
ptr = arr;
for(int i=0; i<blocks*4; i++)
{
ptr = (long*)(*ptr);
}
}
end = clock();
cout << "128kb:"<< end-begin << " ms";
return 0;
}
long block4(long *arr, int size)
{
long *ptr;
time_t begin, end;
begin = clock();
for(int n=0; n<N; n++)
{
ptr = arr;
for(int i=0; i<blocks*8; i++)
{
ptr = (long*)(*ptr);
}
}
end = clock();
cout << "256kb:"<< end-begin << " ms";
return 0;
}
int main (long *arr, int size) {
// создаёт блоки и инициализирует их согласно условию задачи
for(int i=1; i<5; i++)
{
blocks*=2;
arrays = new long[blocks];
for(int j=0; j<blocks; j++)
arrays[j] = long ( arrays + j + 1 );
}
//запускаем блоки на выполнение и подсчет времени
block1(long *arr, int size);
block2(long *arr, int size);
block3(long *arr, int size);
block4(long *arr, int size);
return 0;
}
не могу понять что передавать в block№(long *arr, int size);
Заранее спасибо
Цитата:
не могу понять что передавать в block№(long *arr, int size);
я думаю это
Код:
Код:
int main (long *arr, int size)
Код:
// создаёт блоки и инициализирует их согласно условию задачи
for(int i=1; i<5; i++)
{
blocks*=2;
arrays = new long[blocks];
for(int j=0; j<blocks; j++)
arrays[j] = long ( arrays + j + 1 );
}
for(int i=1; i<5; i++)
{
blocks*=2;
arrays = new long[blocks];
for(int j=0; j<blocks; j++)
arrays[j] = long ( arrays + j + 1 );
}
я такого ещё не видел:) если запустите в отладчике, то увидите, что массив не заполняется
Код:
#include <iostream>
#include <ctime>
using namespace std;
const int N = 10000; //количество чтений каждого блока
//возвращает кол-во элементов в массиве
#define _countof(_Array) (sizeof(_Array)/sizeof(_Array[0]))
//возвращает кол-во элементов типа long в блоке размером kb килобайт
#define COUNT(kb) (kb*1024/sizeof(long))
long size[] = {1,2,4,8,16,32,64,128,256,512,1024}; //массив с размерами блоков
long *arrays[ _countof(size) ]; //массив указателей на блоки
// создаёт блоки и инициализирует их согласно условию задачи
void initArrays()
{
for(int i=0; i<_countof(size); i++)
{
arrays = new long[ COUNT(size) ];
for(int j=0; j<COUNT(size); j++)
arrays[j] = long ( arrays + j + 1 );
cout << _countof(size)<< endl;
}
}
// возвращает время, потраченное на прохождение блока arr размера size
long getTime(long *arr, int size)
{
long *ptr;
time_t begin, end;
begin = clock();
for(int n=0; n<N; n++)
{
ptr = arr;
for(int i=0; i<COUNT(size); i++)
{
ptr = (long*)(*ptr);
}
cout << COUNT(size) << endl;
}
end = clock();
return end-begin;
}
int main()
{
initArrays();
for(int i=0; i<_countof(size); i++){
cout << size << " kb: " << getTime(arrays, size) << "ms\n";
cout << _countof(size)<< endl;
}
}
#include <ctime>
using namespace std;
const int N = 10000; //количество чтений каждого блока
//возвращает кол-во элементов в массиве
#define _countof(_Array) (sizeof(_Array)/sizeof(_Array[0]))
//возвращает кол-во элементов типа long в блоке размером kb килобайт
#define COUNT(kb) (kb*1024/sizeof(long))
long size[] = {1,2,4,8,16,32,64,128,256,512,1024}; //массив с размерами блоков
long *arrays[ _countof(size) ]; //массив указателей на блоки
// создаёт блоки и инициализирует их согласно условию задачи
void initArrays()
{
for(int i=0; i<_countof(size); i++)
{
arrays = new long[ COUNT(size) ];
for(int j=0; j<COUNT(size); j++)
arrays[j] = long ( arrays + j + 1 );
cout << _countof(size)<< endl;
}
}
// возвращает время, потраченное на прохождение блока arr размера size
long getTime(long *arr, int size)
{
long *ptr;
time_t begin, end;
begin = clock();
for(int n=0; n<N; n++)
{
ptr = arr;
for(int i=0; i<COUNT(size); i++)
{
ptr = (long*)(*ptr);
}
cout << COUNT(size) << endl;
}
end = clock();
return end-begin;
}
int main()
{
initArrays();
for(int i=0; i<_countof(size); i++){
cout << size << " kb: " << getTime(arrays, size) << "ms\n";
cout << _countof(size)<< endl;
}
}
Тот код, что сверху для девушки - чтобы разобралась.
Что нужно в ней поправить? Заранее Спасибо, очень помогаете
чтоб легче помочь было, вы бы задание скинули:)
2) Каждый элемент памяти должен содержать адрес следующего элемента памяти с шагом в единицу.
3) Определить время считывания отдельных блоков памяти.
4) Определить зависимость времени обращения к блоку в зависимости от обьема.
5) Определить влияние команд программы на время считывания блока. Для этого необходимо после каждой команды обращения к памяти добавить пустые блоки. Исполнить только для одного блока. Проанализировать полученные данные.
Чтобы засечь время - надо читать блоки 10 000 раз
Код:
// создаёт блоки и инициализирует их согласно условию задачи
[COLOR="Red"] for(int i=1; i<5; i++)[/COLOR]
{
blocks*=2;
arrays = new long[blocks];
for(int j=0; j<blocks; j++)
arrays[j] = long ( arrays + j + 1 );
}
[COLOR="Red"] for(int i=1; i<5; i++)[/COLOR]
{
blocks*=2;
arrays = new long[blocks];
for(int j=0; j<blocks; j++)
arrays[j] = long ( arrays + j + 1 );
}
вместо выделенной строки нужно написать
Код:
for(int i=0; i<4; i++)
иначе arrays[0] просто пропускаем, а в несуществующий arrays[4] будем пытаться что-то записать.
А так, в отладчике вылетает ошибка:
[HTML]Необработанное исключение в "0x00411536" в "12.exe":
0xC0000005: Нарушение прав доступа при чтении "0xfdfdfdfd".[/HTML]
на строке:
Код:
long block1(long *arr, int size)
{
long *ptr;
time_t begin, end;
begin = clock();
for(int n=0; n<N; n++)
{
ptr = arr;
for(int i=0; i<blocks*2; i++)
{
[COLOR="red"] ptr = (long*)(*ptr); [/COLOR]
}
}
end = clock();
cout << "32kb:"<< end-begin << " ms";
return 0;
}
{
long *ptr;
time_t begin, end;
begin = clock();
for(int n=0; n<N; n++)
{
ptr = arr;
for(int i=0; i<blocks*2; i++)
{
[COLOR="red"] ptr = (long*)(*ptr); [/COLOR]
}
}
end = clock();
cout << "32kb:"<< end-begin << " ms";
return 0;
}
к сожалению, я не смог исправить:(
число слишком большое "0xfdfdfdfd" = 4261281277 (long int от -2147483648 до 2147483647)
Большое спасибо. Выручили)))