본문 바로가기

메모리

메모리(Memory)영역 - 스택영역(stack segment) 스택 영역(stack segment)은 아주 잠깐 사용하고 삭제할 데이터를 저장하는 공간이다. 잊어버리지 않게 금방 사용하고 버리는 '일회용품'이라고 기억하고 있으면 좋을 것 같다. 좀더 구체적으로 이야기하면 함수 호출과 관련된 정보들이 위치하게 되는 영역이다. 함수의 인자들, 리턴 어드레스, 그리고 함수 내에서 사용되는 지역 변수(매개변수)들이 바로 이 곳에 저장된다. 그리고 그 외에도 몇 가지 값들이 스택 영역에 저장되어 있는데, 대표적인 예가 쉘의 환경변수(environment) 값이다. 이러한 값들은 모두 버퍼 오버플로우 공격과 밀접한 관계를 가지고 있는 것들이기 때문에, 우리가 가장 큰 관심을 갖고 들여다 봐야 할 영역이다. 그리고 스택 세그먼트(SS) 레지스터는 스택 세그먼트의 주소를 포함한다.. 더보기
가상 메모리(virtual memory) 운영체제(OS)는 레지스터(register), 캐쉬(cache), 램(RAM), 하드디스크(hard disk) 를 하나의 커다란 메모리로 보이게끔 도와준다. 이렇게 운영체제가 통으로 구성해주는 메모리는 가리켜 가상 메모리(virtual memory)라 한다. 가상이라고 하는 이유는? 물리적인 메모리(하드웨어 관점에서 메모리)를 기반으로 가상으로 구성된 메모리이기 때문이다. 그리고 우리가 흔히 이야기 하는 메모리의 주소 또한 Linux 나 Windows 와 같은 운영체제가 만들어주는 가상메모리 주소이다. [출처] 도서 : 난 정말 C Programming을 공부한 적이 없다구요! (윤성우 지음) 더보기
프로그램을 실행하는데 있어서 메모리 공간이 필요한 이유? 프로그램의 실행 속도에 미치는 영향 : 메모리의 활용방식 > CPU의 성능 프로그램의 실행과정에서 선언하는 변수의 메모리 공간 할당을 위해서프로그램의 실행과정에서 사용되는 상수의 표현을 위해서연산 및 호출된 함수의 반환 값을 임시로 저장하기 위해서=> 이처럼 어느 한 순간도 메모리 공간을 사용하지 않을 때가 없다. [출처] 도서 : 난 정말 C Programming을 공부한 적이 없다구요! (윤성우 지음) 더보기
메모리(Memory)영역 - 코드영역(code segment) 메모리 영역을 공부하기 전에 '세그먼트'(segment) 와 '영역'이라는 표현에 대해서 같은것인지에 대해서 긴가민가 했었는데 공부를 하면서 아래 그림과 같이 이렇게 나누어진 영역을 세그먼트(segment)라고 한 다는 것에 대해서 알 수 있었다. CPU가 읽어 해설할 수 있는 기계어들이 위치하게 되는 영역을 말한다. 우리가 작성한 메인 프로그램의 기계어 코드가 바로 이 영역에 위치하게 된다. 보통 첫번째로 실행 가능한 명령어는 이 세그먼트(segment)의 맨 처음에 위치하며, 운영체제(OS)는 프로그램 실행을 시작하기 위해 그 위치를 알고 있다. 이름이 의미하듯이, 코드 세그먼트(CS) 레지스터는 코드 세그먼트의 주소를 의미한다. 그리고 우리가 코딩한 것을 실행을 시키면 CPU가 알아서 코드영역에 저.. 더보기