기본 콘텐츠로 건너뛰기

FTZ 문제 풀이

어떻게 다 풀고 나니까 더 있었으면 좋겠다는 생각도 들고 그 이상 있으면 못 풀었을 것 같다는 생각도…

FTZ 보고서

댓글

이 블로그의 인기 게시물

C언어 register 변수의 함정카드

C언어를 하다보면 register 라는 CPU의 레지스터에 자료를 저장하는 변수를 알수있다. 대신에 한 프로그램에서 최대 2개 정도까지만 사용이 가능하고 지역변수만 가능 및 32bit CPU는 32bit 크기의 변수만 사용 가능하다. 장점만 보면 기본적으로 메모리쪽에 저장되는 일반 변수들보다 더 빠르게 접근이 가능할 것 같은데...인라인 어셈이랑 메모리랑 레지스터랑 비교하면 어떤게 가장 빠른지 궁금해서 한번 테스트 해보게 되었다. 우선 테스트 해볼 코드는 다음과 같다. 거의 동일한 연산을 하고 다른 점이 있다면 인라인 어셈은 전부 다 레지스터를 이용해서 연산한다는 정도...? 위의 코드를 컴파일 해서 실제로 돌려보면 실행 결과는 다음과 같이 나온다. !? 그냥 아무런 형식도 지정해주지 않은 auto와 똑같은 결과가 나온다. # C언어는 기본적으로 아무런 형식을 지정해주지 않으면 auto로 해준다. # int a => auto int a 그래서 어째서 저런 결과가 나왔는지 컴파일에 옵션을 줘서 어셈파일을 분석해 보았다. 인라인 어셈 auto for register for push ebp mov ebp, esp mov ecx, 0 jmp SHORT $INLoop$3 $INLoop$3: cmp ecx, 10000000 jae SHORT $EXIT$4 mov eax, ecx shl eax, 2 inc ecx jmp SHORT $INLoop$3 $EXIT$4: cmp ebp, esp call __RTC_CheckEsp popebp ret,0 push ebp mov ebp, esp sub esp, 8 mov DWORD PTR [ebp-8], -858993460 mov DWORD PTR [ebp-4], -858993460 mov DWORD PTR _i$2[ebp], 0 jmp SHORT $LN4@For $LN...

Android Auto Naver Login (네이버 자동 로그인) - 2

(1편 부터 이어집니다.) 웹뷰에서 자바 스크립트설정이랑 쿠키도 끝낫으니 이제 요청헤더에 몇몇개의 값을 추가해줘야된다. 나중에 로딩할때         web.loadUrl(NAVER_LOGIN, extraHeaders);   이렇게 포함시켜주면 된다. 일단 요청헤더를 추가하기 위해서 Map<String, String> 형식으로 추가해준다.         Map<String, String> extraHeaders = new HashMap<String, String>();         extraHeaders.put("Referer", Config.HEADER_REFERERURI);         extraHeaders.put("ContentType", Config.HEADER_CONTYPE);         extraHeaders.put("User-Agent", Config.HEADER_UA); 대충 이렇게 설정해주는데 각각의 값은 다음과 같다. (코드에서 Ctrl + C, Ctrl + V라 좀 깁니다...) [Class Config]     public static final String HEADER_CONTYPE = "header_ConType = \"application/x-www-form-urlencoded\";";     public static final String HEADER_UA = "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:48.0) Gecko/...

far, near 포인터

far, near 포인터는 예전 Dos 시절에 사용하던 포인터 들입니다. 16비트 메모리 환경에서 20비트 메모리 주소를 표현하기 위해서 사용되었습니다. 그 당시에는 메모리에 접근하기 위해서 오프셋(16bit)과 세그먼트(16bit)라는 것을 사용해서 예를 하나 들자면 F000 : 0001 (세그먼트 주소 : 오프셋 주소) = F0000001 (실제 주소) 이렇게 두 값을 더해서 메모리 주소를 표현 했습니다. near 포인터는 오프셋 포인터만을 저장할 수 있어 16 bit의 크기를 가지고 있습니다. far 포인터는 세그먼트 와 오프셋을 모두 저장이 가능하고 32bit의 크기를 가지고 있습니다. 그리고 huge 라는 포인터도 있는데 이 포인터는 오프셋을 저장하지만 far 포인터와는 다르게 오프셋의 값에 0 ~ 15까지의 값 만 넣을수 있다고 합니다. 이 주소를 사용하면 주기억 장치의 한 장소 중에서 주소가 딱 하나로 결정되는 장점이 있다고 하네요. 현재의 win32에서는 사라진 것으로 알려져 있으나 windows.h 에 아직 존재하기는 합니다. 아래와 같이 코드를 작성한후 돌리게 되면 아래 사진과 같은 결과를 얻을 수 있습니다. #include <stdio.h> #include <windows.h> void main(void) {     int far test = (int far)new int;     short near test2 = (short near)new short;     printf("far : %d\n", test);     printf("near : %d\n", test2);     system("pause"); } * 원래 정석대로면 farmalloc 등을 이용해서 할당을 하는게 맞긴 하지만 들어 있는 헤더를 찾지 못해서 new 로 비슷하게 구현...