punkochel
30.06.2020, 19:01
Прочитал интересный момент по инициализации массива, якобы при создании он заполняется нулями, следовательно тратит на это некоторое время.
Если использовать такой макрос, то можно избежать этой операции:
#define noinit:%0[%1]; goto _noinit_%0; new %0[%1]; _noinit_%0:
Эксперимент, код:
new str_test[10];
printf("New:");
for(new i; i < 10; i++)
printf("%i", str_test[i]);
noinit:str_test_1[10];
printf("Noinit:");
for(new i; i < 10; i++)
printf("%i", str_test_1[i]);
Результат:
New:
0
0
0
0
0
0
0
0
0
0
Noinit:
12243456
12243460
8
0
12211184
12898112
8
12881708
10
10
Откуда берутся различные цифры после Noinit:? Это какие-то ссылки на ячейки памяти или что?
Еще интересен момент, есть ли смысл изменить макрос таким способом?
#define noinit:%0[%1]; goto _noinit_%0; new %0[%1]; _noinit_%0: %0[0] = 0;
В таком случае можно будет забыть о ручной инициализации, или я не так что-то понимаю?
Может быть если использовать %0[0] = 0;, то пока я получаю доступ к 0-ой ячейке массива, профит от noinit: пойдет на нет?
Если использовать такой макрос, то можно избежать этой операции:
#define noinit:%0[%1]; goto _noinit_%0; new %0[%1]; _noinit_%0:
Эксперимент, код:
new str_test[10];
printf("New:");
for(new i; i < 10; i++)
printf("%i", str_test[i]);
noinit:str_test_1[10];
printf("Noinit:");
for(new i; i < 10; i++)
printf("%i", str_test_1[i]);
Результат:
New:
0
0
0
0
0
0
0
0
0
0
Noinit:
12243456
12243460
8
0
12211184
12898112
8
12881708
10
10
Откуда берутся различные цифры после Noinit:? Это какие-то ссылки на ячейки памяти или что?
Еще интересен момент, есть ли смысл изменить макрос таким способом?
#define noinit:%0[%1]; goto _noinit_%0; new %0[%1]; _noinit_%0: %0[0] = 0;
В таком случае можно будет забыть о ручной инициализации, или я не так что-то понимаю?
Может быть если использовать %0[0] = 0;, то пока я получаю доступ к 0-ой ячейке массива, профит от noinit: пойдет на нет?