Obj-C 프로그램 내에서 memset 또는 memcpy를 사용할 때 컴파일러는 데이터의 설정 (memset) 또는 복사 (memcpy)를 32 비트 쓰기로 최적화 할 것인가 아니면 바이트 단위로 수행할까요?memcpy/memset 사용
1
A
답변
0
Memset은 표준 C 라이브러리의 일부로 제공되므로 사용중인 구현에 따라 달라집니다. 나는 대부분의 구현이 네이티브 CPU 크기 (32/64 비트)와 나머지 바이트 단위로 블록을 복사 할 것입니다.
void *
memcpy (dstpp, srcpp, len)
void *dstpp;
const void *srcpp;
size_t len;
{
unsigned long int dstp = (long int) dstpp;
unsigned long int srcp = (long int) srcpp;
/* Copy from the beginning to the end. */
/* If there not too few bytes to copy, use word copy. */
if (len >= OP_T_THRES)
{
/* Copy just a few bytes to make DSTP aligned. */
len -= (-dstp) % OPSIZ;
BYTE_COPY_FWD (dstp, srcp, (-dstp) % OPSIZ);
/* Copy whole pages from SRCP to DSTP by virtual address manipulation,
as much as possible. */
PAGE_COPY_FWD_MAYBE (dstp, srcp, len, len);
/* Copy from SRCP to DSTP taking advantage of the known alignment of
DSTP. Number of bytes remaining is put in the third argument,
i.e. in LEN. This number may vary from machine to machine. */
WORD_COPY_FWD (dstp, srcp, len, len);
/* Fall out and copy the tail. */
}
/* There are just a few bytes to copy. Use byte memory operations. */
BYTE_COPY_FWD (dstp, srcp, len);
return dstpp;
}
그래서 다시 바이트 그리고 마지막, 즉 그것을 다음 몇 바이트 먼저 정렬하려면 사본, 사본을 볼 수
다음은 예제 구현을위한 방어 적이기의의 glibc의 버전입니다. 일부 커널 작업을 사용하여 최적화 된 페이지 복사를 수행합니다.
2
Darwin source에서 이러한 방법의 libc 구현을 볼 수 있습니다. 10.6.3에서 memset은 단어 단위로 작동합니다. memcpy는 확인하지 않았지만 아마도 동일합니다.
이 기능을 호출하는 대신 컴파일러에서 작업을 인라인으로 처리하는 것이 맞습니다. 나는 내가 문제를 기대하지는 않을지라도, 더 잘 알고있는 사람에게 그것이 무엇을 할 것인지를 대답하게 할 것이라고 생각한다.
관련 문제
- 1. javax.xml.xpath 사용. scala.xml 사용
- 2. 사용
- 3. 사용
- 4. 사용
- 5. 사용
- 6. 사용
- 7. 사용
- 8. 사용
- 9. 사용
- 10. 사용
- 11. 사용
- 12. 사용
- 13. 사용
- 14. 사용
- 15. 사용
- 16. 사용
- 17. 사용
- 18. 사용
- 19. f # 키워드 사용 및 사용
- 20. 점 표기법 사용/사용 안함?
- 21. 함수 사용 vslt에서 템플릿 사용?
- 22. 쿼리에서 별칭 사용 및 사용
- 23. 새로운 사용/삭제의 올바른 사용
- 24. 알림 사용/사용 안 함
- 25. 배포자에게 사용 패턴 - 사용 패턴?
- 26. DI의 사용 패턴/사용 사례 또는 사용 시작시기
- 27. 로컬로 Mercurial 사용 Subversion 서버에서만 사용
- 28. MySQL - IF 사용 ... 쿼리 내 ELSE 사용
- 29. 요소 규칙 사용 및 사용 안 함
- 30. HTML 표 사용 가능 너비의 100 % 사용
정렬 문제와 같은 특수한 경우를 제외하고 바이트 단위로이 작업을 수행하는 현대적인 구현이 있는지 의심 스럽습니다. – Ofir