Почему небезопасные указатели используются в Swift, особенно в металле

Наибольшее значение для типа данных INT - 2147483647. Если номер, который вы вставляете, больше 2147483647, это вызовет проблему. Для решения измените тип данных с INT на BIGINT, поскольку BIGINT имеет максимальное значение 9223372036854775807, это может решить вашу проблему. Посмотрите на этом сайте: https://dev.mysql.com/doc/refman/5.7/en/integer-types.html

1
задан Lance Pollard 17 March 2019 в 22:51
поделиться

1 ответ

Семантика Swift позволяет делать копии определенных типов данных для безопасности при чтении и потенциальной записи фрагментов памяти не атомарного размера (выделения при записи и т. Д.). Эта операция копирования данных, возможно, требует выделения памяти, что потенциально может вызвать блокировку с непредсказуемой задержкой.

Небезопасный указатель может использоваться для передачи ссылки на (возможно) изменяемый массив (или блок байтов) или его фрагмент, который не должен копироваться, независимо от того, как (небезопасно) осуществляется доступ или передача между функциями или потоки. Это потенциально уменьшает потребность во времени выполнения Swift, чтобы сделать так много выделений памяти.

У меня было одно прототипное приложение для iOS, в котором Swift тратил значительный процент ресурсов ЦП (и, вероятно, времени работы от батареи), выделяя и копируя фрагменты регулярных массивов Swift размером в несколько мегабайт, передаваемые функциям с очень высокой скоростью, некоторые мутировали, некоторые не мутируют их (для анализа DSP РФ почти в реальном времени). Большая текстура GPU, суб-текстура-срез, доступ к которой происходит при каждом обновлении кадра, возможно, может иметь аналогичные проблемы. Переключение на небезопасные указатели, ссылающиеся на распределение памяти в C, остановило эту потерю производительности / батареи в моем простом прототипе Swift (посторонние операции выделения и копирования исчезли из профилирования производительности).

0
ответ дан hotpaw2 17 March 2019 в 22:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: