Tech & IT 187

내 vim 사용 history

* 단어 검색 set hls (검색한 단어 highlight)set nohls:nohlset ignorecase 대소문자 구분 없앰set ic 대소문자 구분 없앰:\c검색어 대소문자 구분없애고 검색:\C검색어 대소문자 구분하고 검색n (다음찾기)N (이전찾기) * 편집u undoctrl + r : redo * 색상 주석이 파래서 잘 안보임color torte(이게 젤 나은것 같음) * 삼바로 윈도에서 볼 때 한글 깨짐 현상 해결set fencs=utf-8,euc-kr,cp949,cp932,euc-jp,shift-jis,big5,latin1,ucs-2leset fencs=utf-8,euc-kr 실제로 여기까지만 해야 제대로 보임 * 화면이동Ctrl + f 한 화면 위로 이동Ctrl + b 한 화면 아래로 ..

VectorImpl 분석, 템플릿과 void* 와 performance측면

android\frameworks\base\include\utils 의 vectorImpl 과 vector VectorImple에서 type과 관계된 것은 모두 void* 로 작성 VectorImpl을 상속한 Vector에서는 void*를 template로 casting작업해서 type맞춰줌 Vector는 casting만 하므로 작은 함수 ==> 이걸 inline으로 만든다. 작은 함수를 inline으로 만들면 코드가 사라지고 template코드가 아닌 그냥 casting code가 된다. 속도도 빨라지고 void*의 위험성을 template으로 상쇄하는 효과적인 코드

Android NDK 작업순서

NDK작업 순서 1. eclipse 에서 android 프로젝트 생성 후에 native함수를 사용하는 소스 작업.. 2. 프로젝트 최상위 디렉토리에서 javah를 사용해서 native function의 헤더 파일 생성.. javah -classpath bin org.example.myNDK2.MyNDK2Activity 3. 프로젝트 디렉토리 하위 디렉토리로 jni폴더 생성 후에 2에서 생성한 헤더 복사해 오기 4. c 소스 구현 ==> binder client가 실행이 될거고 server의 function이 호출되고 5. Android.mk파일 만든 후에.. ndk-build명령으로 빌드 6. 실행..

inline 을 많이 쓰자 작은 함수라면 장점많고, 단점적고

C, C++언어에서 인라인 장점 : 속도가 빠르다 인라인 단점? : 목적 코드가 커진다.? 아니다 작은 코드라면 목적코드도 작아진다 모든 compiler는 인라인은 default로 무시, 옵션켜야만 inline이 치환된다 cl inline.cpp /Ob1 인라인 치환해달란 옵션 debugging할때는 어려울 수 있다. call이 안보이니까 그러면 개발은 inline옵션 안넣고 release시 inline옵션 넣으면? 된다 inline int Add1(int a, int b) {return a + b;} int Add2(int a, int b) {return a + b;} int main() { int a = 1, b = 2; int n1 = Add1(a, b); // 기계어 코드 치환 int n2 = A..

Calling Convention정확히 알아야 함(어셈으로 살펴보는 함수 call의 원리)

어셈으로 살펴보는 함수 call의 원리 java는 __stdcall이라는 방식을 사용합니다. java와 C가 통신하려면 __stdcall방식을 아셔야 합니다. www.nasm.us 에서 download에서 win최신 버전을 설치한다 nasm -f win32 -o 1.obj 1.asm //////////////////////////////////////// // main.c #include int asm_main(); int main() { int n = asm_main(); printf("result = %d\n", n); return 0; } ; 3. asm - 함수의 인자 전달 방식 ;1. 레지스터를 사용한 인자 전달 - 빠르다!! 하지만 갯수의 제약이 있다. ;2. 스택을 사용한 인자 전달 - 인자..

Binder5 (Android Framework)

#include #include #include #include #include #include #include using namespace android; #include "ICalc.h" // 클라이언트는 BpCalc를 알 필요가 없다. // 알면 안된다. // 이거는 이제 이거 다 되고 나면 Stub에서 설명하며 개선해 나갈듯 int main(int argc, char** argv) { sp proc(ProcessState::self()); sp sm = defaultServiceManager(); sp svc = sm->getService(String16("myserver1")); //아래 캐스팅을 하는 순간 ICalc::asInterface()를 호출하는 데 결국 거기서 BpCalc객체가 생성된..

Binder 2 (Android Framework)

// froyo/external/여러분폴더/0321/binder3폴더를 만들고 myclient3.cpp로 만드세요 #include #include #include #include #include #include #include using namespace android; enum { ADD = IBinder::FIRST_CALL_TRANSACTION, SUB }; // 모든 Proxy를 만들때 공통으로 사용되는 부분은 부모로 뽑아서 사용하자. class myBpRefBase : public virtual RefBase { sp mRemote; public: myBpRefBase( const sp& binder ) : mRemote(binder) {} sp remote() const { return mRe..