ну инициализация она обычно один раз и чаще всего на скорость можно не заморачиваться. (плюс оверхед по памяти)
а вот если идет постоянное обращение по индексам и допустим в ~99.9% случаев известен максимальный размер массива, возможно есть смысл написать свою простую обертку вокруг статического массива на замену динамическому.
ну инициализация она обычно один раз и чаще всего на скорость можно не заморачиваться. (плюс оверхед по памяти)
У меня запись тормозит при парсинге тиков. Там их десятки миллионов, поэтому значение имеет.
а вот если идет постоянное обращение по индексам и допустим в ~99.9% случаев известен максимальный размер массива, возможно есть смысл написать свою простую обертку вокруг статического массива на замену динамическому.
Возможно, что и при чтении имеет смысл делать обертку.
ЗЫ На чтении не получилось ускориться
long ArraySum1( int &Array[] )
{
long Sum = 0;
constint Size = ArraySize(Array);
for (int i = 0; i < Size; i++)
Sum += Array[i];
return(Sum);
}
#define ARRAY_SIZE 100000long ArraySum2( int &Array[] )
{
long Sum = 0;
constint Size = ArraySize(Array);
int ArrayStatic[ARRAY_SIZE];
for (int i = 0; i < Size;)
{
constint Size2 = i + ARRAY_SIZE < Size ? ARRAY_SIZE : Size - i;
ArrayCopy(ArrayStatic, Array, 0, i, Size2);
for (int j = 0; j < Size2; j++)
Sum += ArrayStatic[j];
i += Size2;
}
return(Sum);
}
#define BENCH(A) \
{ \
constulong _StartTime = GetMicrosecondCount(); \
A; \
Print("Time[" + #A + "] = " + (string)(GetMicrosecondCount() - _StartTime)); \
}
voidOnStart()
{
int Array[];
ArrayResize(Array, 1e8);
ArrayInitialize(Array, 1);
BENCH(Print(ArraySum1(Array)));
BENCH(Print(ArraySum2(Array)));
}
Спасибо. Странно, конечно. У меня стабильная разница.
Получается, что при заполнении динамических массивов лучше сначала заполнять статические, а потом делать ArrayCopy в динамические.
Так и есть!
Так и есть!
ну инициализация она обычно один раз и чаще всего на скорость можно не заморачиваться. (плюс оверхед по памяти)
а вот если идет постоянное обращение по индексам и допустим в ~99.9% случаев известен максимальный размер массива, возможно есть смысл написать свою простую обертку вокруг статического массива на замену динамическому.
ну инициализация она обычно один раз и чаще всего на скорость можно не заморачиваться. (плюс оверхед по памяти)
У меня запись тормозит при парсинге тиков. Там их десятки миллионов, поэтому значение имеет.
а вот если идет постоянное обращение по индексам и допустим в ~99.9% случаев известен максимальный размер массива, возможно есть смысл написать свою простую обертку вокруг статического массива на замену динамическому.
Возможно, что и при чтении имеет смысл делать обертку.
ЗЫ На чтении не получилось ускориться
Так и есть!
у меня fillarray1 чуть быстрее
а с чтением там совсем беда
у меня fillarray1 чуть быстрее
Release-версию запускаю. Оптимизация включена.
Release-версию запускаю. Оптимизация включена.
Time[FillArray1(Array1)] = 17732
Time[FillArray2(Array2)] = 18808
Хз что значит релиз - компилил по F7 (наверное это) МЕ 2085
Time[FillArray1(Array1)] = 17732
Time[FillArray2(Array2)] = 18808
Хз что значит релиз - компилил по F7 (наверное это) МЕ 2085
ME 2093x64. F7 - Release, F5 - Debug.
ME 2093x64. F7 - Release, F5 - Debug.
Time[FillArray1(Array1)] = 55949
Time[FillArray2(Array2)] = 62778
Build 2085.
Time[FillArray1(Array1)] = 55949
Time[FillArray2(Array2)] = 62778
Build 2085.
Возможно, в 2093 что-то поменяли.