Доступ к готовым решениям

Переход в группу "Пользователь"

300.00
Одноразовый платёж
Быстрый переход в группу "Пользователи", без надобности написания постов и ожидания.

Покупка дает возможность:
Быть полноправным участником форума
Нормальное копирование кода
Создавать темы
Скачивать файлы
Доступ к архиву Pawno-Info

Функция memset - самая быстрая функция

VVWVV

Начинающий
Пользователь
Регистрация
2 Янв 2016
Сообщения
86
Лучшие ответы
0
Репутация
38
Описание:
Заполняет все ячейки массива переданным значением.​

Параметры:
array[] - массив/строковая переменная, в которую будет записан результат
val - заполняемое значение​

Возвращаемое значение:
Всегда возвращает нуль.​

Плюсы реализации:
  • Быстрое заполнение. В 4-5 раз быстрее варианта от Slice.
Минусы реализации:
  • Зависимость от библиотеки . Необходимо подключить библиотеку asm.
Код:
Код:
stock memset(array[], val, size = sizeof array) {

	static
		amx_header[AMX_HDR],
		bool:is_amx_header_initialized = false;


	if (0 == _:is_amx_header_initialized) {
		is_amx_header_initialized = true;
		GetAmxHeader(amx_header);
	}

	new
		base,
		ctx[AsmContext],
		cod = -(amx_header[AMX_HDR_DAT] - amx_header[AMX_HDR_COD]);

	#emit CONST.pri     memset
	#emit LOAD.S.alt    cod
	#emit ADD
	#emit STOR.S.pri    base

	AsmInitPtr(ctx, base, 200);

	@emit PROC
	@emit LOAD.S.alt    12
	@emit LOAD.S.pri    16
	@emit FILL          (size << 2)
	@emit RETN

	#emit LCTRL         5
	#emit SCTRL         4
	#emit CONST.pri     memset
	#emit ADD.C         4
	#emit SCTRL         6

	return 0;
}
Пример использования:
Код:
main()
{
	new array[1000] = {1000,1000+1,...};

	print(!"Before:");
	printf("0:   %d", array[0]);
	printf("499: %d", array[499]);
	printf("999: %d", array[999]);

	memset(array,6);

	print(!"After:");
	printf("0:   %d", array[0]);
	printf("499: %d", array[499]);
	printf("999: %d", array[999]);
}
Автор: VVWVV
Копирование данной статьи на других ресурсах без разрешения автора запрещено.​
 
Сверху Снизу