반응형

ITStory 116

- 동적배열 - malloc()

배열은 C언어가 제공하는 가장 기본적인 자료 구조이며 워낙 단순하기떄문에 누구나 쉽게 익숙해질수 있다. 배열의 장점은 두가지로 나눌수 있다. 첫번째는 구조가 단순 하기때문에 정보자체를 기억하는 메모리외에 추가로 소모하는 메모리가 전혀없어서 공간효율이 좋다. 둘째로 아무리 배열크기가 커지더라도 검색속도가 일정하다는것이다. 이러한 장점에도 단점이 있는데 배열요소가 연속된 메모리공간에 배치되어 있어야 하므로 중간의요소를 삭제하거나 새로운 요소를 삽입할수 없다는 것이다. 배열은 일반적으로 삽입, 삭제가 안되는것으로 알려져 있다. 하지만 이것은 일종의 고정관념이다. 방법을 찾아보면 불편하기는 하지만 불가능 한것은 아니다. 중요한것은 미리 선언해놓은 크기이상 집어넣기가 불가능하다. 소스를 고치면되지만 불편하다. 만..

C 2010.10.21

- 함수 포인터 , void형 포인터 -

프로그래머가 정의한 모든 함수는 프로그램 실행 시 메인 메모리(main memory)에 올라가게 된다. 메모리 상에 올라간 다음에 실행이 가능하기 때문이다. 이때 함수의 이름은 메모리 상에 존재하는 함수의 위치를 가리키는 주소 값을 의미한다. 즉, "함수의 이름은 메모리상에 존재하는 함수의 위치를 가리키는 포인터"이다. 그럼 함수의 이름이 주소 값을 지니는 포인터라면, 함수의 이름과 동일한 타입의 포인터 변수를 선언해서 그 값을 저장할 수 있지 않을까? 이러한 기능을 하는 포인터를 가리켜 함수 포인터라 한다. (2) 함수 포인터의 포인터 타입은 어떻게 되는가? 함수 이름의 포인터 타입을 결정짓는 요소는 리턴형과 전달인자다. int fct1 (int a) // 맨 왼쪽은 리턴형, 맨 오른쪽 괄호 안은 전달..

C 2010.10.20

- #pragma -

일단 전처리 명령어 인것을 알아두자. 컴파일할대 플랫폼이 틀려지거나 CPU가 틀려지건자 하면 컴파일 옵션을 주게되는데 pragma 가 그런 역활을 한다. 옵션을 보면 once : 해당 소스가 한번만 include되게 하여 여러번include되는것을 컴파일러 차원에서 막아준다. 즉 컴파일 시간을 줄일수 있다. comment(lib, *) : comment로 사용할수 있는 명령은 여러개가 있는데 그중 대표적인것이 lib 이므로 해당 라이브러리를 링크 시켜준다. data_seg : dll에서 데이터를 공유하고자 할때 사용된다. warning : 특정 warning을 체크하지 않는다. 예)warning(disable : 4705) => 4705번 warning은 나타자지 않는다. message : 컴파일시 특정..

C 2010.10.20

- 비트 연산자 -

-2-다.비트 연산자 비트 연산자는 논리 연산자와 비슷하지만 비트를 연산 대상으로 한다는 점이 조금 다르다. 비트(bit)란 기억 장치의 최소 단위로서 1 또는 0을 기억하며 8개의 비트가 모여야 1바이트가 된다. 32비트의 정수 1234는 16진수로는 0x4d2이며 메모리에 다음과 같이 기억된다. 32비트이므로 32개의 비트가 있고 이 각각의 비트가 1이나 0을 기억함으로써 1234라는 숫자 하나를 저장하는 것이다. 비트 연산자는 이 그림에서 각 격자인 비트들을 대상으로 조작을 한다. 비트가 연산대상이라는 말은 두 피연산자의 대응되는 비트끼리 연산해서 그 결과를 리턴한다는 뜻이다. 일상 생활에서 쓰는 십진수와는 다른 이진수 차원의 연산이라 다소 어려운 것처럼 보이겠지만 막상 다 이해하고 나면 이진수만큼..

C 2010.10.18

- goto문 -

일단 goto문의 가장 큰 단점은 프로그램의 흐름을 복잡하게 만든다. goto문의 사용은 가급적 자제하는 것이 좋다는 의견이 많다. goto문은 이동할 위치를 지정 해놓고 지정된곳으로 이동시켜주는 함수이다. 이동할 위치를 의미하는 레이블을 선언 해야하며 goto문을 통해서 이동할 레이블을 지정 해주면 되는 것이다. 예를한번 보자.ㄴ #include int main() { int num; printf("숫자 입력 : "); scanf(%d", &num); if(num == 1) goto label1; //label1이라는 레이블로 이동하라는 의미이다. elseif(num == 2) goto label2; //label2이라는 레이블로 이동하라는 의미이다. else goto label3; //label3이라..

C 2010.10.18

[업무일지]20101004-임종현

@Lowlevel.c@ void lowlevel_init(void) //16line 선택적 컴파일 { unsigned char i = 0; /////////////////////////////////////////////////////////////////////////// // EFC Init /////////////////////////////////////////////////////////////////////////// #ifdef AT91SAM7S512 //선택적 컴파일--AT91SAM7S512가 define(정의)되면 밑에 두줄을 포함한다.. AT91C_BASE_MC->MC0_FMR = AT91C_MC_FWS_1FWS; // 1 Wait State to work at 48MHz AT91C_B..

School Study 2010.10.18

[업무일지]20100930-임종현

오전- Android- •arItem 컬렉션을 초기화하고 어댑터에 전달, 리스트 뷰와 연결한다. •어댑터는 원본을 읽어 타입에 맞는 뷰를 생성하고, 리스트 뷰는 리턴된 뷰를 표시한다. ============================================================= public class ListOfViews extends Activity { ArrayList arItem; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedIntanceState); setContentView(R.layout.listtest); arItem = new ArrayList(); arItem.add(new ListItem(0..

School Study 2010.09.30

[업무일지]20100928

dlr => 어셈블러 명령어 LDR은 load 명령이다. LDR에는 불러오는 변수의 크기에 따라 LDRB, LDRH, LDR의 세가지 종류가 있다. LDRB는 byte 변수를 불러올 때, LDRH는 short 변수를 불러올 때, LDR은 int 변수를 불어올 때 쓴다. STR는 store 명령으로 마찬가지로 STRB, STRH, STR 이 있다. 첫 번째 인자는 레지스터가 두번 째 인자는 주소가 된다. 세 번째 인자는 load/store 연 산을 한 다음 주소값을 증가시키고자 할 때, 얼마만큼 증가시킬 지를 지정한다. ==================================================================== b => 중계(branch) ====================..

School Study 2010.09.29

====가상주소====

● 가상주소 가상 메모리는 컴퓨터와 운영체계에 의해 구현되는 개념으로서 가상의 주소 공간을 할당하여 대단히 큰 용량의 메모리나 데이터 저장공간을 사용할 수 있도록 만든다. 또 한 가상 메모리 기법으로 제공되는 주소공간으로서, 프로세스의 관점에서 사용하는 주소이다.오늘날 대부분의 운영체제에는 가상 메모리 기법이 적용되어 있다. 가상메모리에서의 주소공간 즉 가상주소 공간은 프로세스가 참조할 수 있는 주소들의 범위이며, 하나의 프로세스 당 하나의 가상주소 공간이 주어진다. 일반적으로 스레드는 프로세스 내의 주소 공간을 공유한다. 주소 공간의 크기는 주소버스(Address Bus)의 크기에 따라 달라진다. 예를 들어 주소 버스가 32비트인 시스템에서 주소 공간의 크기는 232개의 서로 다른 주소에 대한 식별자를..

Linux 커널 2010.09.28
반응형