내 주요 질문은 int 및 int8_t 실행 시간에 차이가 있습니까?int 대 int8_t를 사용하여 성능 차이가 있습니까
내가 작업하고있는 프레임 워크에서 일부 매개 변수가 int8_t
으로 설정되어있는 코드를 자주 읽습니다. "특정 매개 변수가 -126,125 범위 밖에있을 수 없기 때문에"코드에서 종종 읽습니다.
많은 경우에 통신 프로토콜로는 int8_t
이 사용되고 많은 필드로 패킷을 잘라 __attribute((packed)) struct
으로 사용합니다.
그러나 어느 시점에서는 주로 데이터 크기에보다 근접한 형식을 사용하는 것이 더 좋을 것이라고 생각했기 때문에 어느 시점에서 컴파일러를 미리 생각해 보았습니다.
코드가 Linux에서 실행되도록 만들어졌으며 glibc를 사용하여 gcc로 컴파일되고 메모리 또는 이식성이 문제가되지 않는다면 성능면에서 실제로 좋은 아이디어인지 궁금합니다.
제 첫 인상은 "어디에서 어떻게 최적화해야하는지 알지 못한다면"컴파일러보다 더 똑똑해 지려고 노력하는 것은 항상 나쁜 생각입니다.
그러나 int8_t
을 실제로 사용하는 것이 성능에 대한 비용인지는 모르겠지만 (더 많은 테스트와 계산은 int8_t
크기와 일치해야합니다. 변수가 범위를 벗어나지 않도록하려면 더 많은 작업이 필요합니다.) 또는 어떤 방법 으로든 성능을 향상시키는 경우
간단한 asm을 읽는 것이 좋지 않으므로 테스트 코드를 컴파일하여 asm에 어떤 코드가 더 좋은지 알아 내려고하지 않았습니다.
관련 질문을 찾으려고했으나 과 int
에서 발견 된 모든 토론은 성능보다는 이식성에 관한 것입니다.
입력 해 주셔서 감사합니다. 이 문제에 대해 설명 된 어셈블리 샘플 또는 소스는 크게 감사하겠습니다.
운영 체제, 컴파일러, 최적화, ABI 및 대상 프로세서에 따라 다릅니다. –
데비안에서는 gcc, -O2에서는 -std = c99, 32 비트 i686 프로세서. 나는 그것이 약간 명확 해 지길 바란다. – DainDwarf
성능을 찾고있는 경우 #가 width로 대체 된 typedef int_fast # _t는 너비가 최소 # 비트 인 가장 빠른 부호있는 정수 유형을 지정합니다. –