프로세스에서 사용 가능한 자원 중 가장 기본적인 핵심자원. 할당, 자원, 반납 등의 메모리 자원 기법 설명
각 프로세스는 독립적인 크기의 가상 주소를 가짐(32비트CPU는 2^32바이트만큼)
운영체제의 소프트웨어와 CPU내부의 가상메모리 소프트웨어가 구현
가상 주소 공간의 기본 구성요소로, 물리메모리나 Swap Area에 있다면 유효페이지, 아니면 segmantation fault반환.
물리 메모리의 공간으로, 페이지와 대응됨
가상 주소 공간의 페이지가 실제 물리적으로 어디에 위치하는지 나타냄. 운영체제가 페이지 테이블을 만들어두면, 컴퓨터시스템이 MMU라는 하드웨어를 통해 메모리에 접근가능함.
2^n바이트 타입에 대해 최하위 n개의 비트가 0으로, 메모리 블록의 배수가 되는 메모리 주소에 위치한 변수나 데이터 지칭
32비트 시스템은 8바이트 단위로, 64비트 시스템은 16바이트 단위로 시작주소가 정해짐.
좀 더 큰 메모리 할당을 할 때, calloc이나 malloc은 메모리 정렬을 해주지 않아 posix 함수 만듬.
가장 큰 기본타입 구성요소의 타입크기를 따름. 하드웨어에 따라 자연스럽게 정렬된다. 정렬을 맞추기 위해 채워넣기(Padding)이 필요
GCC 컴파일러에서 -Wpadded 옵션으로 패딩 넣기 막을 수 있다.
align이 안된 주소에 대해 casting을 한다면 결과가 이상하게 나온다.
void xmalloc(size_t size)
비표준함수, 내부적으로 메모리 할당받고 에러체크함.
void xmalloc0(size_t size)
xmalloc에서 0으로 초기화하는 기능 추가
캐스팅할 필요가 없다. 오히려 캐스팅 시 버그를 감출수도
크기가 size인 nr개의 objects들만큼 메모리 배정하고 0으로 초기화
size가 기존보다 크다면 높은 확률로 복사하여 다른 공간에서 다시 할당해야하므로 주소가 변경됨
NULL 검사할 필요 없다.
C에서 메모리 반납은 필수, 반납을 안하면 메모리 누수현상 발생.
누수 방지를 위해 메모리 할당 시 반납 지점도 고려해야함
객체지향 언어에선 garbage collection으로 반납안해도 미사용 메모리를 반납시킴.
memptr: 할당된 메모리의 시작주소
alignment: 정렬할 메모리 크기(alignment의 배수로 시작주소가 할당됨)
size: 할당할 메모리 크기
anonymous mapping, fd로 지정한 파일에서 offset을 기준으로 length만큼을 가상메모리에 매핑시킴.
특정 주소공간은 swap area에 저장하지 않고, 메모리에 유지시켜달라.
모든 주소공간을 메모리로 올려라. overhead 크지만, 빠른 응답 필요할 때 씀
stack에서 메모리 할당(지역변수와 같은 느낌), 함수가 끝나면 메모리를 반납
stack에 메모리 할당하고, s를 복사해라.
stack에 최대 n만큼 메모리를 할당하라.
메모리를 c값으로 초기화
두 메모리 s1, s2를 비교
src에서 dst에서 메모리를 이동
src에서 dst로 메모리 복사
특정 문자 c가 있는지 확인
haystacklen만큼 크기의 haystack에서 needlelen크기의 needle 부분 메모리블록이 있는 지 확인