본문 바로가기

6. With IT

vprintf에 va_arg,va_end,va_start 기능 변수 인수 목록을 구현한다. 문법 #include void va_start(va_list ap, lastfix); type va_arg(va_list ap,type); void va_end(valist ap); DOS UNIX Windows ANSI C C++ only ■ ■ ■ ■ 주석 ☞ vfprintf 및 vprintf 같은 일부 C 함수는 고정된(알려진) 수의 파라미터와 아울러 변수 인수 목록을 취하는데, va_arg,va_end,va_start 매크로는 이들 인수 목록을 액세스하는 편리한 방법을 제공한다. 이들 함수는 호출된 함수가 전달 중인 인수의 목록을 일일이 추적하기 위해 사용된다. 해더 파일 stdarg.h는 하나의 형(va_list)과 세 .. 더보기
vprintf, vsprintf 출처 : http://blog.naver.com/endfirst?Redirect=Log&logNo=20003220224 11-3.가변 인수 가.가변 인수 함수 여기서는 가변 인수 함수에 대해서 알아 본다. 가변 인수의 함수를 만드는 방법에 대해서는 물론이고 가변 인수 함수가 동작하는 원리에 대해서도 자세하게 분석해 볼 것이다. 조금 어렵기는 하지만 포인터를 적절하게 활용하는 예를 볼 수 있으며 포인터로 어떤 일이 가능한지를 경험할 수 있는 좋은 기회가 될 것이다. 가변 인수 함수가 어떻게 동작하는지를 설명할 수 있다면 포인터를 정복했다고 생각해도 좋다. 가변 인수란 말 뜻 그대로 인수의 개수와 타입이 미리 정해져 있지 않다는 뜻이며 그런 인수를 사용하는 함수를 가변 인수 함수라고 한다. 가변 인수 함수의.. 더보기
Thread Thread는 한마디로 하자면 일을 할 수 있는 다른 시간축을 만드는 것. 화면을 그리면서 키보드 입력을 받는것 또한 Thread와 같은 것 입니다. 프로그램을 개발하면서 아주 간단한 프로그램을 제외하고는 Thread를 엄청나게 많이 쓰게 됩니다. 실행 : Run() 메소드 내의 코드를 실행하고 있는 상태 대기 : 실행을 기다리고 있는 상태. 1) Waiting : Synchronized에 의한 대기 상태 2) Sleeping : CPU의 점유를 중지하고, 아무것도 안하고 있는 상태. 3) Suspended : 일시 중지 상태. 스케줄러에 의해 다른 Thread가 선택될때 4) Blocked : 입출력 메서드 등의 호출로 인해서 메서드의 종료가 일어날 때까지 쓰레드가 대기하고 있는 상태. 준비 : 실행상.. 더보기
inline함수 더보기
union 출처 : http://blog.naver.com/fusdofls?Redirect=Log&logNo=50080915924 이번 시간은 union(공용체)와 BitField에 대해서 알아보도록 하자. 예전에 번외편으로 Little Endian방식을 쓸때 구조체, union과 비트필드를 이용했다. 개별로는 많이 쓰이지 않기 때문에 이번시간에도 통틀어서 설명하겠다. union에 대해서 간략하게 알아보자. union은 공용체라고 불리운다. 선언 방식은 위의 코드처럼 전역으로 쓰이는 경우가 대부분이며, 구조체와 같은 형태를 가진다. 하지만 구조체와는 다른방식으로 데이터를 관리한다. 모든 공용체안의 멤버변수들은 같은 메모리 공간안에 자리를 잡고 쓰여지게 된다. 이걸 도식화해서 보기로 하자. 옆에 파란글씨고 써있는 부.. 더보기
new연산자 C++ new 연산자에 대해서 질문합니다. lun**** 질문 20건 질문마감률93% 2009.10.31 17:17 2 답변 2 조회 2,829 문자열을 저장하고 싶어서 new연산자를 쓰려고 합니다. 일단 선언은 char * temp; 이렇게 char형 포인터 하나 선언 하고 여기에 cin>>char; 로 문자열을 받았더니 temp 초기화되지 않은 변수라고 경고가 뜨더군요 그래서 char * temp = new char; 로 메모리를 잡아두고 하니 경고가 사라졌습니다. 이 new char라는게 char하나인 1바이트만큼만 메모리 잡는게 아니었나요? 그런데 그 이상인 문자열 'abcde' 를 저장해도 오류가 안나고 출력도 abcde 다나오더군요 제생각엔 char 하나만큼만 메모리 공간을 잡았으니 오류가 나.. 더보기
Little endian/Big endian Little Endian / Big Endian - 메모리 저장 순서 규정 | 전공관련 노트/기초지식 2011/11/30 20:43 Posted by Micol Endian - 메모리 저장 순서를 규정 cpu마다 메모리에 데이터를 저장시킬 때 방식이 다르다. Intel x86 같은 경우에는 Little-endian 방식을 채택, Sun, 모토로라계열은 Big-endian 방식을 채택하였다. Little/Big-Endian의 차이는 논리적 메모리 공간에 그 메모리 폭(어떤 메모리건 논리적 메모리 공간의 폭은 모두 1 Byte)을 넘어서는 Data를 저장할 때 발생한다. 예를들어 0A0B라는 Word Size의 Hexadecimal 데이터를 11000H의 메모리에 저장한다고 해보자. 위에 그림에서 알 수 있.. 더보기
메모리구조 1) code 영역 (text segment) - 코드 자체를 구성하는 메모리 영역으로 Hex파일이나 BIN파일 메모리다. - 프로그램 명령이 위치하는 곳으로 기계어로 제어되는 메모리 영역이다. (말그대로 코드가 저장되는 공간) 2) data 영역 - 전역변수(global), 정적변수(static), 배열(array), 구조체(structure) 등이 저장된다. 가) 초기화 된 데이터는 data 영역에 저장되고, 나) 초기화 되지 않은 데이터는 BSS (Block Stated Symbol) 영역에 저장된다. - 프로그램이 실행 될 때 생성되고 프로그램이 종료 되면 시스템에 반환 된다. - 함수 내부에 선언된 Static 변수는 프로그램이 실행 될 때 공간만 할당되고, 그 함수가 실행 될 때 초기화 된다... 더보기
링크와 로더 프로그램으로 탄생하기 위해서는 몇가지를 거쳐야 합니다. 처음에는 컴파일 -- > 링크 ---> 실행파일 이런 순서를 거치게 됩니다. * 컴파일(Compile)은 프로그램 소스를 컴퓨터가 알아보기 쉽게 기계어로 바꾸는 것이 컴파일입니다. 즉, 용어로 목적파일이 생깁니다. 파일이름.o 또는 파일이름.obj 이런 파일로 생깁니다. * 링크(Link) 링크는요~~~ 컴파일이 된 것으로 즉, 목적파일과 라이브러리 파일과 합치는데요 라이브러리는 파일으름.lib 이런 파일형태로 되어 있습니다. 이 라이브러리는 우리가 필요한 함수가 많이 들어 있는데요. 예로 들면 printf()함수 같은 것이 라이브러리 파일에 포함이 되어 있습니다. 그래서 목적파일과 라이브러리 파일이 합쳐져서~~~ 실행파일이 생깁니다. * 실행파일 .. 더보기
static chain // dynamic chain scope이란, 변수의 접근이 가능한 범위를 뜻합니다. 이 scope을 결정하는 방식에는 두가지 방식이 있는데, 첫째는 static scoping이고 둘째는 dynamic scoping입니다. static scoping에 대해서 설명을 하자면, static scoping은 run time에서 프로그램의 flow에 관계 없이 compile time에 변수의 scope이 결정되는 방식입니다. 대표적으로 C를 생각하시면 되겠네요. C에서는 변수의 scope이 변수의 선언 위치에 따라서 compile time에 결정이 되지요. 이 때, subroutine을 subroutine 안에서 선언할 수 있는 Pascal 등의 언어는 자신 바깥에 있는 어느 함수가 자신을 호출했는지 확정할 수 없는 문제가 발생하는데, 이에.. 더보기
Android 아키첵쳐 더보기
NDK + eclipse + cygwin 플러그인하는방법 ndk 를 빌드 할 때는 cygwin 창을 옆에 띄어 두고 하는 것이 가장 빠르고 편리하다. 자주.cpp 파일을 변경하게 된다고 하면 그렇지만, 정말 가끔 .cpp 를 빌드 한다고 하면 구지 cygwin 창을 띄우지 않고 eclipse에서 자동으로 빌드를 하게 할 수 있다. 이렇게 되면 오류 message도 깔끔하게 볼 수 있고 좋게 되지만 단점이라고 하면 할 때 마다 cygwin 을 부팅 시키므로 시간이 좀 오래 걸린다. 각자의 용도에 따라 사용 하면 될 것 같다. 일단 이전 포스트에서 성공한 libs와 obj폴더를 삭제 한다. 프로젝트 설정에서 Builders 의 New를 선택하고 tool type에서 Program을 선택 한다. NDK란 이름으로 살짝 바꿔주고 Location에 자신의 cygwin .. 더보기
android8 - ApiDemo(OpenGL) 출처 : http://yonomi.tistory.com/112 Android 2.2 ApiDemo에는 OpenGL ES 2.0을 이용하여 Textured Triangle을 회전시키는 예제가 들어있다. 그냥 막연하게 OpenGL ES 1.1을 가지고 뭔가를 해 보려고 했었는데, GLSurfaceView.Renderer interface method 들의 argument가 GL10으로 되어 있어, 그걸 GL11로 casting 해서 사용해 보려고도 했었는데 (당연히) 실패했다(하하^^;). 그래서, "아... OpenGL ES 2.0은 커녕 OpenGL ES 1.1도 사용하기 어렵구나..." 라고만 생각하고 있었는데, 바보 같은 생각 이었다. (역시 사람은 모르면 찾아보고 물어봐야 한다! -_-;) GLSu.. 더보기
GLSurfaceView기초 출처 : http://android15.tistory.com/m/post/view/id/144 GLSurfaceView는 OpenGL ES 애플리케이션을 더 쉽게 작성할 수 있도록 합니다. GLSurfaceView는 OpenGL ES를 렌더링의 일부 또는 전체에 사용하는 애플리케이션을 구축하는 훌륭한 기반입니다. 2D 또는 3D 액션 게임이나 구글 맵스 스트리트뷰아 같은 2D 또는 3D 데이터 비주얼라이제이션 애플리케이션이 후보가 될 수 있습니다. 가장 간단한 GLSurfaceView 애플리케이션 view plaincopy to clipboardprint? package com.example.android.apis.graphics; import javax.microedition.khronos.egl.EG.. 더보기
JNI & NDK 설치 1.Download NDK „ go to Android Development site and download „ NDK & SDK „ http://developer.android.com/sdk/ndk/index.html „ go to Cygwin site and download „ http://cygwin.com/install.html 2. Install(Cygwin) „ 1. Choose A Download Source „ Install from Internet „ 2. Select Root Install Directory „ to use as a root(Z:Coding\’cygwin’) „ 3. Select Local Package Directory „ to store the installation.. 더보기
JAVA JNI & Android NDK - 설치 및 사용 JAVA JNI 1. Path 설정 변수 이름 : JAVA_HOME 변수 값 : C:\Program Files\Java\jdk버전명 추가 확인 2. CLASS_PATH 설정 변수 이름 : CLASSPATH 변수 값 : .;C:\Program Files (x86)\Java\jdk1.6.0_25\lib\tools.jar; (주의: 최초 CLASSPATH변수를 생성해서 변수 값을 넣을 경우, 맨 앞에 쩜콜론(.;)을 추가!!) 확인 나머지과정을 보통을 책들에 다 들어가 있음 -끝- Android NDK => http://blog.naver.com/dizmahs/110087452000 더보기
iOS - Application architecture 출처 : http://www.soft005.com/zbxe/dev_article/1944 핵심 어플리케이션 설계 모든 iOS 어플리케이션은 UIKit 프레임워크를 사용해서 만들어지며 따라서 어플리케이션들은 근본적으로 같은 핵심 아키텍쳐를 가지고 있습니다. UIKit 은 어플리케이션을 동작시키고, 사용자 입력의 처리를 조절하고, 화면에 컨텐츠를 표시하는데 필요한 주요 객체들을 제공합니다. 어플리케이션들이 서로 달라지는 부분은 기본 객체들을 구성하는 방법과 어플리케이션의 사용자 인터페이스 및 동작을 증대시키기 위해서 커스텀 객체들을 통합하는 부분입니다. 시스템과 동작중인 어플리케이션 간에 발생하는 많은 상호작용들이 있으며, 대부분의 상호작용들이 UIKit 하부구조에 의해서 자동으로 처리됩니다. 그러나, 여러.. 더보기
Android - Dalvik VM & Core Lib 출처 : http://blog.java2game.com/tag/%EB%8B%AC%EB%B9%85 지난 10회 자바 컨퍼런스에서 "Dolphin-4 Android Run-time (Dalvik VM & Core Lib) 분석"이란 주제로 안드로드이에 관한 세션을 들었습니다. 예전에 모바일 관련 어플리케이션을 개발한 경험이 있는 관계로 임베디드 환경에 상당히 많은 관심을 가지고 있었습니다. 지금은 오래된 일이지만, 아직도 임베디드 환경에서 개발하던 예전 시절을 생각하며, 임베디드 환경에 맞는 어플리케이션을 개발하고 싶은 꿈을 가지고 있었습니다. 마침 들풀이란 닉네임으로 유명하신 양정수님께서 자바 컨퍼런스에서 구글(Google) 안드로이드(Android)의 핵심이라고 볼 수 있는 "Dolphin-4 Andro.. 더보기
iOS - Xcode이해 1. IOS의 개요 ○ MacOS 구조 →→ ○ 주요 용어 - Carbon : Mac OS 8과 9에서 C 프로그래밍을 위해 제공되는 APIs임. 64비트를 지원하는 Mac OS 10.5에서는 Objective-C 프로그래밍을 위해 Carbon 대신에 Cocoa를 사용함. - Aqua : Mac OS X에서 사용자 인터페이스를 제공하기 위해 C++로 만들어진 APIs - Darwin : NeXTSTEP, BSD로부터 만들어진 오픈 소스로서 POSIX 유닉스 운영체제와 호환됨 - BSD(Berkeley Software Distribution) : 1977에 버클리대에서 만들어진 유닉스 운영체제의 한 종류. 1995년에 최종 버전이 나온 이후 FreeBSD, NetBSD 등 다양한 오픈 소스 형태로 배포되었.. 더보기
iOS - 앱구조 아이폰 앱의 구조를 한 눈에 보여준다. 그냥 이대로 외워버리자. 위 그림은 아이폰 앱의 MVC 모델 기반의 구조를 간결 명료하게 보여준다. 각 컴포넌트 사이의 관계를 이해하면 앞으로 프로그래밍을 하면서도 서로를 참조하거나 접근해서는데 용이할 것이다. 아이폰 개발을 하며 숱한 책들을 보아왔는데 아무리 잘 써 놓은 책이라도 http://developer.apple.com/library/ios/navigation/index.html iOS Reference Library라는 이름으로 한데 모여있는 여기 문서들의 수준이 넘사벽인 것 같다. 책 > iOS Reference Library > Google 순서로 가는게 체계적으로 아이폰 앱 프로그래밍을 이해/개발하는데 도움이 될 듯 하다. 더보기
iOS - 구조 Objective-C main()->autopoolrelease -> lifecycle MVC 구조를 가지고 있음. Xcode와 Interface Builder의 TOOL을 이용함. 더보기
Android-Lifecycle 출처 : http://androidhuman.tistory.com 안드로이드는 모바일 기기에서 구동되는 것을 목적으로 하고 있기에 PC에서 구동되는 프로그램들에 비해 더 효율적인 메모리 관리가 필요합니다. 안드로이드 어플리케이션을 구성하는 구성요소 중 하나인 액티비티(Activity)도 효율적인 메모리 관리를 위해 액티비티가 생성되고 소멸되는 조건인 생애주기(Lifecycle)을 가지고 있습니다. 액티비티 뿐만 아니라 브로드캐스트 리시버(Broadcast Receiver), 서비스(Service)도 일정한 생애주기를 갖고 있지만, 가장 자주 쓰이는 구성요소인 액티비티의 생애주기부터 알아보도록 하겠습니다. 액티비티의 상태는 크게 활성(Active), 일시정지(Paused), 정지(Stopped) 이 3가지.. 더보기
Android-Runtime 안드로이드 런타임 안드로이드의 핵심 라이브러리core library는 Java 프로그래밍 언어의 핵심 라이브러리에서 사용가능한 대부분의 기능을 포함하고 있다. 모든 안드로이드 애플리케이션은 달빅Dalvik 가상 머신에 대한 자기 자신의 인스턴스를 가지고, 자신의 프로세스 내에서 실행된다. 달빅은 하나의 디바이스에서 다양한 가상머신이 효율적으로 실행될 수 있도록 만들어졌다. 달빅 가상머신은 최소 메모리를 사용footprint하도록 최적화된 달빅 실행executable 포맷(.dex)의 파일을 실행한다. 이 가상머신은 레지스터 기반이며, Java 언어 컴파일러에 의해 컴파일된 후, SDK에 포함되어 있는 “dx”라는 툴tool을 통해 .dex 포맷으로 변환된 클래스를 실행한다. 달빅 가상머신은 쓰레딩thre.. 더보기
Android-Event3 이벤트 핸들러(Event Handler) 이벤트 처리 이벤트(Event)라는것을 사용자의 입력이나 시스템 상황 변화에 따라 발생하는것! 안드로이드에서는 이벤트를 처리하는 다양한 방법이 존재한다. 각 방법별로 특성이 조금씩 다르고 여러가지 변형된 구조를 허락한다. 처리방법은 크게 콜백메서드 Override와 리스너 구현이라는 2가지 방법이 있다. 그리고 리스너를 구현하는 방법은 5가지 정도로 세분화 된다. 1. 콜백 메서드 재정의 콜백(Callback) : 특정 이벤트가 발생했을때 시스템에 의해 자동으로 호출되는 메서드 이벤트를 처리하는 가장 쉬운 방법으로 해당 클래스를 재정의해서 콜백 메서드를 작성하는것이다. 사용자가 화면을 터치할 때, 키를 누르거나 뗄 때, 트랙볼을 굴릴 때 호출되는 콜백 메서드들을 .. 더보기
Android-Event2 개략적인 이벤트 처리 과정 액티비티 생성시 액티비티의 윈도우를 WindowManagerService에 등록해둠 이벤트 발생시 네이티브 라이브러리(EventHub)를 통해 이벤트 읽음 이벤트 큐(KeyInputQueue)에 이벤트 쌓임 이벤트 디스패치 쓰레드(InputDispatcherThread)는 이벤트큐에서 이벤트를 꺼내어 WindowManagerService의 디스패치 메소드 호출 WindowManagerService는 등록된 애플리케이션의 윈도우에 이벤트를 전달 이벤트를 전달받은 윈도우는 하위 UI 컴포넌트 트리를 찾아가며 리스너 콜백함수 실행 이벤트 전달을 위한 준비 WindowManagerService는 system_server 프로세스에서 실행중인 서비스이다. WindowManagerServ.. 더보기
Android-Event 출처 : http://underclub.tistory.com UI 이벤트 처리 어플리케이션과 사용자의 상호작용에서 이벤트 처리를 위해서는, 사용자가 사용하는 특정 뷰 객체에 이벤트를 등록하는 일이 우선되어야 합니다. 뷰 또는 뷰 클래스에서 이벤트 처리를 위한 public 메소드 몇가지가 제공되는데요, 이 메소드는 액션이 발생할때 시스템에 의해 호출됩니다. 뷰가 터치되면 시스템은 onTouchEvent() 메소드가 그 객체에서 호출됩니다. 하지만 이벤트 처리를 위해 해당 클래스를 상속하여 메소드를 오버라이드 해야되는데, 단순히 이벤트 처리만을 위해 모든 뷰 클래스가 상속받아야되는 상황은 번거롭게 느껴집니다. 이런 문제점 때문에 '이벤트 리스너' 라는 인터페이스를 제공하여 이벤트 처리를 쉽게 할 수 있습니다.. 더보기
안드로이드란??플랫폼/프레임워크란? 안드로이드란?? -> 대표적으로 휴대폰을 동작할 수 있게, 사용할수 있게끔 만들어 놓은 플랫폼중 하나이다. 그럼 아이폰의 플랫폼 종류는 무엇일까????당연히 애플에서 만든 iOS일 것이다. Android Platfrom architecture Platform? 플랫폼이란 서비스, 응용소프트웨어, 컨텐트 등의 기반이 되는 환경을 의미한다. 예를 들어 윈도우 OS는 그 위에서 동작하는 오피스, 메신저, 미디어 플레이어 등의 응용소프트웨어의 기반이 된다. 즉 윈도우즈 OS는 다양한 응용소프트웨어의 플랫폼 역할을 한다. 사용자에게 직접적인 가치를 주는 것은 OS 위에서 동작하는 응용소프트웨어가 되겠지만, OS는 응용소프트웨어가 작성되고 동작할 수 있는 기반이 되며, OS 없이는 응용소프트웨어가 동작할 수 없게 .. 더보기