삼성 s3c6410보드를 사용하고 있습니다. CPU는 ARMv6 (ARM1176jvf-s)이구요.
설명서를 좀 읽어보니 thumb모드는 16bit로 컴파일되고, arm 모드에서 32bit로 컴파일 된다는거 같긴한대...(아닐수도.ㅠㅠ)
타겟보드 bit를 확인하려면 어떻게 해야 하나요 ??
sizeof 를 이용해서 확인하려면 타겟의 쉘에서 컴파일을 해야하지 않나요 ??
cygwin에서 크로스컴파일러를 사용해 컴파일하고, 타겟에서 실행하니 32bit인것 같은데.. 좀 미심쩍어서요;;
혹시 thumb모드와 arm모드를 필요에 따라 변경할 수도 있는건가요 ? 가능하다면 방법이 궁금합니다.
답변 감사합니다.^^
LOCAL_ARM_MODE := arm 으로 하면 컴파일 시 Compile arm ... 이라 출력되고 thumb로 하니 Compile thumb라고 출력이 되네요.
그런데 이게 단순히 이름만 바뀐 것인지 모드가 바뀐것인지는 좀 긴가민가합니다.
코드를 돌려봐도 결과가 같게 나오기도 하고... 실수연산 속도도 차이가 없네요.
계속 찾아봐야할 문제같네요. ^^ 다시한번 답변 감사드립니다.
작은 프로그램일 경우도 사이즈가 차이날까요 ??
차이가 안 난다면 뭔가 잘못했다는 것이죠?
현재 테스트중인 프로그램을 보니 사이즈 변화가 없네요;; ㅠㅠ
답변 감사합니다.
몇가지 보충하겠습니다.
1. Thumb 냐 Arm 이냐 하는 것은 Opcode 의 크기에 영향을 주는 것으로, 일반적인 의미의 32bit 냐 16bit 냐할 때의 의미와는 좀 다릅니다. 모두 32bit 라고 생각하시는 편이 맞습니다.
2. 타겟보드 비트 확인하실 필요없이 Thumb 지원되는 32비트 입니다.
3. sizeof 는 크로스툴체인에서 컴파일하시는한 호스트가 어디냐는 상관없습니다. 모두 동일하게 나오지 않는다면 가짜 크로스툴체인을 쓰고 계신겁니다. 발견 즉시 버리시면됩니다.
4. NDK 를 가정한다면 Thumb 와 Arm 을 선택하는 것은 두 가지 방법이 있습니다. 하나는 LOCAL_ARM_MODE 로 같은 Android.mk 에 포함된 모든 소스에 적용하는 것입니다. 다른 하나는 소스 확장자를 바꾸는 것입니다. 이 방법은 파일별로 적용할 수 있습니다. 둘 다 NDK 문서에 나와있습니다.
5. Thumb 와 Arm 모드는 하나의 프로그램에서 혼용할 수 있습니다. NDK는 여기에 필요한 컴파일 옵션을 이미 적용하고 있습니다.
6. 디벅모드로 빌드하실 때 Compile thumb 라고 나올 수 있습니다만, 이는 보통 사실과 다른 경우가 있습니다. 사실은 Arm 모드로 빌드되고 있을 수 있다는 뜻입니다. 잘 확인하셔야 합니다. 저는 NDK 의 버그라고 보고있습니다.
7. 프로그램의 크기는 Thumb 여부뿐만 아니라 다른 최적화 옵션에도 큰 영향을 받습니다. 다른 조건을 모두 동일하게 만들고 비교하셔야 합니다.
회색님이 이미 답변하신 부분들은 반복하지 않았습니다.