Приведение указателей к целым числам и из них допустимо, но результаты определяются реализацией. См. Раздел 6.3.2.3 стандарта. Похоже, что предполагается, что результаты - это то, чего ожидают все, кто знаком с системой, и на самом деле это обычно происходит на практике.
Если рассматриваемая архитектура может эффективно взаимозаменяемо манипулировать указателями и целыми числами, и вопрос заключается только в том, сработает ли она на всех компиляторах для этой системы, тогда ответ заключается в том, что она, вероятно, все равно будет работать.
(Конечно, если бы я писал этот код, я бы подумал, что это нормально как есть, пока не доказано обратное. Мой опыт показывает, что компиляторы для данной системы ведут себя очень схожим образом на этом уровне; язык ассемблера просто предлагает конкретный подход, который все потом предпримут.)
«Вероятно, работает» - это не очень хороший общий совет, поэтому я предлагаю просто написать работающий код, окружить его достаточно подходящими #ifdef
s, чтобы его компилировали только известные компиляторы, и откладывал до memcpy
в других случаях.
#ifdef
редко бывает идеальным, но он довольно легкий по сравнению с другими возможностями. И если требуется поведение, определяемое реализацией, или специфичные для компилятора приемы, параметры в любом случае довольно ограничены.