프로그래밍 29

ZeroMemory, memset, 구조체={0} 의 차이

출처 : http://reister.tistory.com/tag/%EA%B5%AC%EC%A1%B0%EC%B2%B4%EC%B4%88%EA%B8%B0%ED%99%94 여러분은 구조체를 초기화 할 때, 어떤 방법을 쓰십니까? 0으로 채워야 한다면요,. 보통 세가지 방법들을 많이 쓰실겁니다. 먼저 Original C에서 부터 즐겨 사용되어 오던 memset()함수가 있겠고요, 둘째로, 윈도우 프로그래밍에서 자주 사용되는 ZeroMemory 매크로도 있구요 제가 즐겨 사용하는 Struct s = {0}; 등이 있지요. 뭐가 다를까요? 은근히 이걸 잘 모르시는분들이 많더라고요. 그래서 직접 보여드립니다. 우선 간단한 테스트 코드를 작성하고요. #include "stdafx.h" #include #include #i..

프로그래밍 2011.07.30

[C특강] 배열을 사용한 효과적인 이중 링크드 리스트 구현

http://cafe.naver.com/pplus/220 [출처] [C특강] 배열을 사용한 효과적인 이중 링크드 리스트 구현|작성자 김은철 이중 링크드 리스트를 사용할 때 장점과 단점은 다음과 같다. 장점은, 1. 데이터의 삽입, 삭제가 빠르다. 단점은, 1. 데이터의 추가 시 메모리 할당이 발생하고, 삭제 시 메모리 해제가 발생한다. 2. 메모리 조각이 많이 발생한다. 3. 항상 처음부터 검색해야 한다. 이 중 단점 1,2를 배열을 사용해서 해결할 수 있다. 배열을 이용하면 메모리의 할당 및 해제가 자주 발생하지 않기 때문에 메모리 단편화를 줄일 수 있어, 효율적인 프로그램을 개발할 수 있다. 또한 메모리를 할당할 때 마다 발생하는 페이지 할당이 줄기 때문에 적은 메모리를 사용하게 된다. 이제는 링크드..

프로그래밍 2011.07.23

C로 구현한 Queue

출처 http://ggaman.tistory.com/419001: #include 002: 003: // LIST 구조체 만들기. 004: typedef struct tag_list { 005: 006: char title[16]; 007: char name[16]; 008: struct tag_list* next; 009: 010: } LIST; 011: 012: 013: // 전체적인 QUEUE를 가르킬 queue 만들디. 014: LIST* queue=NULL; 015: 016: 017: // 데이터 삽입 018: // LIST* member로 넘어온 값을 삽입한다. 019: void enqueue(LIST* member) 020: { 021: LIST* t_list; 022: LIST* s_lis..

프로그래밍 2011.07.18

구조체 동적 배열

http://winapi.co.kr/clec/cpp2/19-1-3.htm 동적 배열 활용 동적 배열은 주소록, 비디오 대여점 관리, 워드 프로세서 등 관리 대상이 동일 타입의 집합이면서 크기가 가변적인 모든 프로그램에 응용 가능하다. 자료의 집합을 다룰 수 있으므로 원시적인 데이터 베이스라고 할 수 있다. 다음 예제는 앞에서 만들었던 동적 배열을 사용한 간단한 주소록 프로그램이다. 한 사람의 신상을 담는 구조체를 정의하고 이 구조체를 요소로 가지는 동적 배열을 만들었다. 배열의 요소 타입만 변경되었으므로 ELETYPE 매크로만 수정하고 나머지 전역변수와 관련 함수는 그대로 사용하면 된다. 예 제 : JusoArray #include struct tag_NameCard { char name[10]; cha..

프로그래밍 2011.07.16

동적배열

출처 http://www.winapi.co.kr/clec/cpp2/19-1-2.htm 동적 배열 앞에서 작성한 예제에서 보았다시피 배열도 메모리를 조작하면 중간에 삽입, 삭제가 가능하여 크기가 가변적인 정보를 다룰 수 있다. 그러나 새로운 요소가 삽입된다 하더라도 배열의 크기가 자동으로 늘어나는 것은 아니므로 미리 선언한 크기 이상의 요소를 추가할 수는 없다. 앞 예제의 ar 배열은 크기 16으로 선언되었으므로 최대 15개의 문자만을 저장할 수 있을 뿐이다. 설사 배열을 동적으로 할당한다 하더라도 할당할 때 필요한 크기를 지정해야 하므로 배열의 크기는 언제나 유한하다. C언어는 중급 언어라는 특성상 배열의 범위를 전혀 점검하지 않기 때문에 배열을 넉넉한 크기로 선언하는 것만으로는 충분하지 않다. 근본적인..

프로그래밍 2011.07.16

ioremap

ioremap : 동적으로 물리주소와 가상주소를 매핑시켜주는 함수 커널영역에서 뿐만 아니라 유저영역에서도 실제 물리 주소를 직접 제어할수 없다. 그래서 사용하고자 하는 물리주소와 그 크기를 인자로 넘겨 주어서 그 도메인의 가상주소를 리턴 받아 그 담부터는 가상주소로 접근해서 실제 물리주소를 제어할 수 있게 하는 것이다. Device제어할때 크게 4가지 자원을 이용 I/O memory, I/O port, interrupt, DMA 이 중에서 I/O memory를 사용하려면 해당 메모리를 접근할 수 있어야 한다. 그러려면 해당 I/O 메모리를 메모리 공간에 mapping 시켜주어야 한다. ioremap은 장치에 있는 I/O메모리를 가상메모리 공간으로 mapping을 시켜주는 일을 합니다. 디바이스의 물리 메..

프로그래밍 2011.05.09