Nami 의 공부방 139

퀵정렬 이해 및 소스

퀵정렬은 정렬 중 제일 빠르다고 다들 알고 있을 것이다 . 그럼 퀵정렬를 이해부터 하고 소스에 대해 말씀드리겠습니다. 퀵정렬은 피봇이라는 기준점을 두고 왼쪽에서 오른쪽으로 증가하는 방향 과 오른쪽에서 왼쪽으로 가는 감소하는 방향으로 나눈다 . 왼쪽에서 오른쪽으로 가는 방향은 피봇보다 무조건 작아야 된다 . 만약 피봇보다 같거나 크면 증가하는것을 멈춘다. 오른쪽에서 왼쪽으로 가는 방향은 피봇보다 무조건 커야된다. 위와 비슷하게 피봇보다 작거나 같으면 감소를 멈춘다. 이 멈춘곳에 화살표가 있다고 가정해 보자 그럼 두개의 화살표가 존재 할것이다. 서로 멈춘 두개의 화살표가 가지고 있는 데이터를 SWAP을 한다. 그리고 다시 화살표들은 증가 및 감소를 하는데 여기서 오른쪽 에서 왼쪽으로 가는 화살표가 왼쪽에서 ..

int main(int argc, char *argv[]) 에 대해서

공부가 잘 안되서 블로그 글을 쓰러 ^---^ 요즘 글을 잘 안써서 블로그가 ㅠㅠ 자 그럼 주제에 써있는 내용으로 들어가 보겠습니다. 우리가 메인문을 많이 쓰시죠? 자 메인문도 일종에 함수 입니다. 그럼 매개변수가 입력될수 있겠죠? 메인문에 매개변수 두개가 입력되었는데요 하나는 int 형에 argc이고 다른 하나는 2차 char형 포인터인 argv이네요 그럼 메인은 어떻게 매개 변수값에 넣을 수 있을까요? 첫번째 방법은 콘솔창에서 디렉토리까지 간 다음에 명령어를 입력하는방법과 두번째 방법은 솔루션 탐색기에서 오른쪽 마우스를 클릭해서 속성 창으로 이동한다음 디버깅에서 명령인수 값에 넣어주면 됩니다 저는 -x -n patten 이라고 입력해 보았습니다. 자 그럼 분석을 시작해 볼까요 int 형에 argc는 ..

realloc 의 의미와 사용방법

밑에 문자열에서 숫자만 추출하는 소스에서 우리는 realloc를 사용하여 동적메모리 할당을 하였습니다. 여기서 동적메모리 할당에 대해서 알아봅시다. 동적메모리는 Heap 영역에 위치하는 녀석으로 malloc , calloc,realloc 이 있습니다. malloc함수는 리턴값이 void*로서 인자값으로는 데이터형과 메모리의 개수를 입력 받습니다. 메모리를 할당 받을시에는 메모리 영역이 초기화 되지 않는 상태 이구요. 리턴받을시에는 리턴받을 포인터 형에 맞춰 줘야 합니다. calloc 함수는 malloc과 비슷하지만 다른점이 있습니다. malloc은 동적메모리를 한줄로 할당했다면 이 녀석을 같은 크기에 있는 녀석을 몇개 만듭니다. 결과적으로는 malloc과 메모리 크기는 같습니다. 그리고 또 한가지 다른점..

디바이스 정리

디바이스 드라이버 의 개념 및 정리 드라이버들은 자신들을 나타낼수 있는 Device_Object를 만든다. 그 Device_Object는 구조의 형식은 그 틀이 정해져 있다. 틀이 정해져 있으면 무슨 문제가 있을까? 한번 생각봐야겠다. 그럼 내가 더 필요한 정보를 삽입할수 없다는 문제점이 있네요.. 그래서 그 방법을 해결하기 위해서 Device_Object 구조체를 살펴 보면 .... Device_Extension이라는 포인터 변수가 있다 +.+ 이 녀석이 무엇을 하는 녀석인가 하고 보면 위의 문제점을 해결해 줄수 있는 녀석이였다 !!!!. 그 녀석을 따라가면 메모리 공간이 있다 바로 거기가 사용자가 사용할수 있는 공간이다 !!!.. 이해가 안되시죠? 저도 많이 힘들었습니다. 머리로 그릴려고 계속 해도 ..

스레드

- 스택 메모리 공간 생성시 스레드가 생성되는 단계에서 함께 만들게 된다. - 스레드 생성시 디폴트로 1Mbyte의 메모리를 예약 -- > 이중 4Kbyte만을 실제로 메모리와 매핑시켜놓음으로써 사용가능하게 하고 ---> 또 하나의 메모리는 가드페이지라는 형태로 - 첫 페이지는 4kByte 영역은 커미드 영역 프로그램에서 바로 스택영역으로 사용 되어 질수 있는 영역 그 아랫부분은 한페이지인 4KByte 영역은 가드페이지 라는 형태로 윈도우에 의해 페이지 보호가 이루어 지고 있는 상태 --> 스레드에서 커미드 되어진 영역을 초과하여 스택을 사용했을때 가드 페이지 부분에 대한 접근이 이루어 질것이고 Windows 운영체제에서는 가드 페이지 영역을 커미드 영역으로 바꾸고 그 아래 가드 페이지를 생성 스택을 더..

스택 백트레싱

스택 백트레싱이란 ... ---> 리턴주소와 그전의 EBP값을 가지고 다시 그전 프로시저로 가서 오류를 확인하는 것 프로젝젝트 셋팅 에서 C/C++ 메뉴에서 프로젝트 옵션에서 /Oy 컴파일 옵션을 통하여 강제적으로 스택 프레임 구성을 생략 위의 경우에 스택 백트레싱이 불가능 하게 되며 , 디버거 의 경우 심벌 파일에 FPO(Frame Pointer Omission) 라는 정보를 포함 시킴으로써 스택 백트레이싱을 가능