Поддержка обсуждается в других ответах.Я буду обсуждать вопросы реализации.
Обычно при чтении из памяти компилятор выдает инструкции процессора для извлечения данных из памяти в регистр.Это может быть атомарным в зависимости от того, как установлена база данных между процессором и памятью.
Если ваш процессор поддерживает 128-битную передачу, а память поддерживает 128-битную шину данных, это может быть одна выборка (или запись).
Если ваш процессор поддерживает 128-битную передачу {регистр}, но шина данных меньше, процессор выполнит достаточно выборок для передачи данных из памяти.Это может быть или не быть атомарным, в зависимости от вашего определения атомарного (это одна инструкция процессора, но может потребоваться более одной выборки).
Для процессоров, которые не поддерживают передачу 128-битных регистров, компилятор выдаст достаточно инструкций для считывания памяти в регистр (ы).Это для регистрации в памяти или памяти для регистрации передач.
Для передачи из памяти в память (например, назначение переменных) компилятор может выбрать использование чтения и записи блоков (если ваш процессор поддерживает чтение и запись блоков).Некоторые процессоры поддерживают SIMD, другие могут иметь инструкции по передаче блоков.Например, ARM имеет инструкции LDM (загрузить несколько) и STM (хранить несколько) для загрузки многих регистров из памяти и хранения многих регистров в памяти.Другой метод чтения и записи блоков состоит в использовании устройства DMA (если имеется).DMA может передавать данные, пока процессор выполняет другие инструкции.Тем не менее, накладные расходы на использование DMA могут потребовать больше инструкций, чем использование 16 8-байтовых (байтовых) передач.
Таким образом, компиляторы не обязаны поддерживать int128_t
.Если они это поддерживают, существуют различные способы передачи данных в зависимости от аппаратной поддержки процессора и платформы.Просмотрите язык ассемблера, чтобы увидеть инструкции, выданные компилятором для поддержки int128_t
.