저 역시 4 - 2 - 1 alignment 순으로 복사를 하도록 구현하였습니다. 1 - 2 - 4 순으로 구현할수도 있지만 대부분 가르키는 포인터 대상은 컴파일러에 의해서 4byte alignment 된 시작위치를 갖기 때문에 4 - 2 - 1 순의 구조가 보다 유리합니다.
그리고 실제로 대부분의 개발환경에서 memcpy 는 inline 으로 구현됩니다. 또한 상수인자조건에 대해서 간략화한 또 다른 inline 처리를 하는것이 보통입니다.
예를 들어서 memcpy 의 크기인자가 상수조건이라면(변수조건이 아닌) 이것은 루프없이 별로도 구현할수 있는 조건이 됩니다.
즉, "memcpy(to, from, 4)" 의 경우는 "*((dword *)to) = *((dword *)from)" 으로 구현될수 있습니다.
저는 그러한 상수식에 대한 컴파일 최적화를 고려하여 작성하였습니다.
즉, 아래의 mzmemcpy 함수는 macro와 inline 의 조합이고 Header 에 명시하여 사용할 의도를 갖고 있습니다.
Recent Posts
Archive Posts
Tags