это фантазии, в голове одного человека не поместятся все трюки для оптимизации, потому люди объединяют свои знания в коде компилятора, которые оптимизируютлучше чем один человек при ручном асме
Я так понял что если взять`struct A { int a; }` и struct B { int b; } то в функции вида void foo(struct A* a, struct B* b ) эти два инта не могут алиаситься, т.е. будет эквивалентно void foo(int* restrict a, int* restrict b)
На всякий случай напомню - 2021 год, разница в 1 такт между командами на абсолютно cold path интересует только наглухо ебанутых, которые не умеют в оптимизацию того, что нужно оптимизировать, и вместо этого оптимизируют cold path.
Рестрикт появился чтобы не мучиться с алиасингом, потому что паковать в структуры просто так неудобно и запутывает.
Паковать единицы данных в структуры круто когда нужно сделать непрозрачный typedef, например, после того, как проверил ввод от пользователя. Т.е. когда на данные навешивается дополнительный инвариант или семантика. Например, "этот инт64 не просто число, но идентификатор процесса, и работать с ним должны только такие-то функции, а не любые функции, принимающие инт"