메모리 8

#003_MFC_메모리의 구성

안녕하세요 삽잡이 입니다. 이번 시간에는 코드 영역과 데이터 영역에 대해서메모리 구조에 대해서 MFC 관점으로 알아보겠습니다. 프로그램은 명령어와 데이터의 집합으로 이루어져 있습니다.데이터를 input 받고 명령어를 통해 가공을하여 output 하는 식이죠... MFC를 두고 예를 들어보도록 하겠습니다. MFC 주요 클래스인 'CFrameWnd', 'CView', 'CDocument' 등은 모두 동적 할당 을 통해 Heap 영역에 저장됩니다. 그리고 동적 할당을 통해 생성된 객체에서 사용하는 지역 변수들은 Stack영역에 만들어지고요... WM_LBUTTONDOWN과 같은 윈도우 메시지들은 코드영역에 자리를 잡습니다.이 외에도 함수들 즉, 메소드들도 코드영역에 자리를 잡습니다. 예를 들어 View라는 클..

#018_WIndow_System_쓰레드(thread) 란?

안녕하세요 삽잡이입니다.이번 시간에는 시스템 프로그래밍을 배우면서 가장 중요한 내용 중 하나!쓰레드에 대해서 알아보도록 하겠습니다. 요즘은 멀티코어 시대로써 여러개의 코어... 그러니까 CPU 자세하게는 연산 장치를 통해 프로그래밍을 할 수 있게 되었습니다. 우선 프로그램이 실행되기 위한 세가지 상태에 대해 알아보도록 하겠습니다.1. Running 상태2. Ready 상태3. Blocking 상태 start를Ready전에, End를 Blocking 후에 실행되게 됩니다.즉, 상태로는 크게 프로그램이 구동되고 실행되는 위의 세가지 상태로 나뉘게 된다는 것입니다. 프로그램이 실행되면 Ready 상태에 놓이게 됩니다.그리고 자기가 실행할 순서가 되면 Running 상태에 놓이게 됩니다.Running 상태에 놓..

곱씹어보자 C!_#018_삽잡이의 두서없이 막말하는 잡다한 것들...

- 연산자 *와 [] 복습하며 까먹지 말아야 할 정리들을 잡다하게 올려봐야겠습니다. 포인터에 대해서 보고 있었는데... *와 []는 같은 기능을 한다고 합니다.즉, * 주소 = 주소 [] 와 같다는 것입니다.이말은 곧... Out Parameter로써 주소값을 인자로 넘길 때에 인자를 받은 함수의 매개변수에 대체적으로 자료형* 로 인자를 받는다는 것이죠... 123456789101112void Input(char* sbuf){//중략} main(){char* buf[100];//중략Input(buf);//중략}cs 요런식으로 말입니다. 그런데 *와 []의 기능은 같으나,관례적으로 연속한 메모리의 집합들을 참조할 때에는 []를 사용한다고 합니다.음... 그러니까 "야... 연속한 메모리들의 집합들이 들어온..

곱씹어보자 C!_#017_삽잡이의 두서없이 막하는 Heap (엉덩이 아님)

죄송합니다... heap 보고 엉덩이라니...죄송합니다.... 아하하.... 아무튼... C언어에서 바라보는 프로그램은 명령어와 데이터로 나뉩니다.그런데 데이터는 우리 사용자에 의해서 저장이 되죠.... 데이터는 크게 세가지의 부분으로 나뉩니다.첫번째, Global Data, 두번째, Stack,세번쨰, Heap 입니다. 왜 나뉘느냐... 바로, 용도에 맞게 적정한 위치에 데이터를 보관하고자 하는 이유에서 입니다.그 중에서, 우리가 알아보고자 하는 영역은 바로 Heap 영역입니다. 그전에 Stack에서 대해서 잠깐 간단하게 설명하자면,Stack은 함수의 중괄호 블럭 시작과 함께 생성되고 종료될 때 소멸되는 공간을 말합니다. 아무튼... 우린 Heap 을 봐야됩니다...Global Data 영역에는 정적 ..

곱씹어보자 C!_#010_ 삽잡이의 두서없이 막말하는 문자열(1)

안녕하십니까 삽잡이입니다. 오늘도 과감하게 시작합니다. 어제 배운 포인터에 대해 잠시 생각해보고 본론으로 들어가겠습니다. 1234567891011121314151617181920/* 안보실 분들은 Jumping 하셔도 됩니다.우선 모든 포인터의 기준은 IDE 환경에서 6 bit OS 설정을 해놓지 않는 한 32 bit 크기를 사용합니다.즉, 포인터의 크기는 4 byte라는 것이죠.모든 프로그램에는 데이터의 값과 위치 둘중 하나를 변수에 담을 수 있다고 했습니다.아무튼... 데이터 타입을 보도록 해봅시다.int 정수형 변수int* 1차 포인터 int** 2차 포인터 (Pointer to Pointer) 셋은 똑같은 int형 변수라고 할 수 있을까요?정답은 No 입니다.int형은 4 byte 크기의 정수를 ..

곱씹어보자 C!_#005_ 삽잡이의 두서없이 막말하는 메모리와 데이터

메모리는 논리적으로 기억공간을 나타내며, 물리적으로는 기억 장치라고 표현됩니다.주로 사용되는 기억장치는 RAM이라고 했었습니다. 메모리에는 아주 중요한 두가지의 용어가 있습니다.바로 value와 address인데요.메모리에 저장되는 정보! 이것을 값(value)라고 부르며, 위치들을 주소(address)라고 부릅니다. 위치 즉, 주소는 0번 부터 시작합니다.저장되는 단위는 1 Byte이며, 그렇다는 것은 저장될 수 있는 내용물은 1 Byte라고 할 수 있죠.한칸에 8 Bit!! 저장되어 있는 값들이 의미를 띄면 데이터가 됩니다.010101 의미없이 나열된 저장 값들은 아무 의미가 없지만,컴퓨터와 약속이 된 010101 은 의미가 있으니 데이터라고 할 수 있죠. 또한, 어떤 정보를 표현하는 것을 데이터라고..

곱씹어보자 C!_#004_ 삽잡이의 두서없이 막말하는 데이터 타입의 등장

프로세스 메모리 구조에 대해서 인터넷에서 찾아보시면 어마어마하게 복잡합니다... 이해를 원하는 삽잡이는 쉽게 가겠습니다. Process 메모리ㅡㅡㅡㅡㅡㅡㅡㅡ| || | > (1)| | | || |ㅡㅡㅡㅡㅡㅡㅡㅡ| || | > (2)| | | | | |ㅡㅡㅡㅡㅡㅡㅡㅡ (1)에는 이전시간에 언급한 바로 명령어 영역이라고 보시면 됩니다.한번 컴파일 되면 변경이 안되죠.변경이 됬다면 그건 바로 바이러스입니다~! 아무튼... 제가 조금 신경써서 보고자하는 것은 바로 (2) 데이터 영역입니다. 데이터 영역에서는 메모리의 주소가 중요합니다.메모리안에 필요한 내용을 꺼내기 위해서는바로 주소를 이용하기 때문이죠!(주소의 저장크기는 1 Byte) 그런데 말입니다... 데이터 영역에는 여러 종류의 데이터들이 있을텐데요.....

곱씹어보자 C!_#002_ 삽잡이의 두서없이 막말하는 명령어와 데이터

그림이랑 내용 수정은 주말 정도에 깔끔하게 수정하도록 하겠습니다 ㅎㅎ 우선은 나 자신의 약속을 지키고자... 횡설 수설일지라도 내용정리를... 아하하 이게 더 재미날수도 있어요 ㅎㅎ 죄송합니다... 안녕하세요~!삽잡이 입니다. 다시한번 지난 시간을 곱씹어서 말씀드리자면프로그램은 뭐다?바로 약속된 0과 1의 약속된 집합 모음이다.그 집합들이 모여서 우리의 편의를 위해 만들어진 프로그램들이 펼쳐져있는 것이죠! 그 약속된 집합에는 크게 명령어, 데이터가 있습니다.C언어에서 가장 자주 쓰이는...김치같은 녀석 printf()로 예시를 들어보도록 하죠. 지금은 C언어 기초 시간이 아니니까...printf()라는 함수의 기능을 잠시 소개하자면,안에 문자열을 입력시 출력이 되는 어마무시한 기능을 보유하고 있는 함수죠..