malloc and realloc functions in C / C++ - Out4Mind

사진 출처: Out4Mind


C언어에는 메모리 할당 및 해제에 대한 4가지 함수가 stdlib.h 라이브러리에서 제공되고 있다.

malloc, calloc, free, 그리고 realloc 함수이다.


이 4가지 함수들 중

realloc 함수의 동작 원리에 대해서 자세히 살펴보고자 한다.


realloc 함수의 프로토타입은 다음과 같다.


void * realloc(void * ptr, size_t size);


realloc 함수는 포인터에 할당된 메모리의 크기를 늘리거나 줄이는 일이 필요할 때 사용하는 함수이다. realloc함수는 호출 시 두 개의 인자를 취하며, 재할당된 영역의 포인터를 반호나한다. 첫 번째 인자는 기존 할당된 메모리에 대한 포인터이며, 두 번째 인자는 요청할 메모리의 크기다. 재할당된 메모리의 크기는 기존 메모리의 크기와 다르며 반환 값은 재할당된 메모리의 포인터다.


 두 개의 인자가 변함에 따라 realloc은 어떻게 작동할까? 아래의 표를 참고하면 한 눈에 이해할 수 있을 것이다.


첫 번째 매개변수 

두 번째 매개변수 

동작 

null 

 임의의 size

 malloc 함수와 동일하다. 

null 아님 

 0

*** 기존 메모리를 해제한다.

null 아님 

 기존 메모리 크기보다 작은 size

 현재 메모리 영역을 사용하여 작은 메모리 영역을 할당한다.

null 아님

 기존 메모리 크기보다 큰 size

 현재 메모리 영역을 사용하거나, 다른 메모리 영역을 사용하여

보다 더 큰 메모리 영역을 할당한다.


오브젝티브-C는 대중적이고 이식성이 뛰어난 C언어를 우아한 스몰토크(Smalltalk)언어에 결합시키려는 목적으로 만들어진 언어입니다. 

이번 포스팅에서는 Xcode로 간단한 Hello World를 출력해 볼것입니다. Xcode에서 프로젝트를 만드는 방법과 오브젝티브-C언어를 이용해서 Hello World를 출력하는 방법에 대해서 설명을 드리고자 합니다.


포스팅하는 지금, Xcode 버전은 5.0.2 입니다.


1. Xcode를 앱스토어에서 다운받고, 실행시킵니다.



2.Xcode를 실행하였다면, "Create a new Xcode project" 버튼을 클릭해주세요.


3. 템플릿은 다음과 같이 선택하세요.

OS X > Application > Command Line Tool


4. 간단하게 프로젝트에 대한 필수 내용(제목 등)을 적습니다. 



5. 왼쪽 스테이터스 바에 main.m 등과 함께 프로젝트 파일의 구조, Hierarchy를 확인할 수 있습니다.



6. main.m 파일을 열고 아래와 같은 소스를 입력합니다.





7. 소스 코드 작성을 완료하였다면 결과물 확인을 위해 "실행"을 합니다.



8. 아래의 Output 윈도우에서 결과물을 확인합니다.



끝~! 어때요? 참 쉽죠?

EEPROM 기능을 이용해서 구현한 Door Lock 구현 동영상입니다.


선명하게 보이지는 않는데, FND Display 에 숫자가 바뀌어 출력되는 정도는 확인하실 수 있으실 거라고 생각합니다.


아쉽게도 폰에서 찍은 동영상이 왼쪽으로 회전되어서 저장이 되었네요;;;


물론 동영상 인코딩으로 다시 재회전시키는 방법도 있지만... 귀찮아서 ^^;;


다음에 기회가 되면 다시 올리도록 하겠습니다.





영상만 보면 상황이 잘 이해 안갈 수도 있어서 부가 설명을 덧 붙이자면,


1) #키를 눌러서 비밀번호를 설정

2) *키를 눌러서 비밀번호 입력-> 맞으면 7777 틀리면 4444


제일 처음 #키 누르고 1234 입력해 비밀번호 1234로 설정 (비밀번호 입력중에는

어떤 숫자인지 알지 못하게 1이 계속해서 뜹니다. 그리고 비밀 번호 설정 후엔 2222가 뜹니다.)


그 후 *키를 누릅니다. 그러면 3333이 뜹니다. 그리고 1234를 순서대로 누르면 맞다고 7777이 뜨고,

다른 숫자(4444)를 누르면 틀렸다고 4444가 뜹니다.


CPU 리셋 이후에 다시 * 키를 눌러서 1234를 눌러도 그대로 맞다고 7777을 띄우는 것을 보면,

EEPROM에 정확하게 비밀번호가 저장되었음을 확인할 수 있습니다.

C 소스 코드를 작성할 때 기본적인 헤더파일들의 위치는


/usr/include/ 에 위치합니다.





tar: 파일을 압축하거나 압축해제하기 위해 사용하는 리눅스 명령어


압축 command:

tar cvf xxx.tar.gz


압축 해제 command:

tar xvf xxx.tar.gz


tar 명령어에 사용하는 몇몇 옵션들을 소개하자면 다음과 같습니다.


-x : 압축 해제한다.

-c : 압축한다.

-v : 압축하거나 압축해제의 과정을 전부 화면에 출력

-f : 파일이름을 지정한다.

-p : 파일권한을 저장한다.

-C : 파일을 압축해제할 경로를 지정한다.


간단하게 사용하는 예제를 보여드릴게요.





touch B C ;B C 라는 빈 파일(empty files)을 생성함.


tar cvf A.tar.gz B C ;B C를 압축하여 A.tar.gz 라는 압축파일을 생성.


rm B C ;B C 파일을 삭제함.(압축해제가 제대로 되었는지 확인하기 위해서)


tar xvf A.tar.gz ;A.tar.gz 압축파일을 해제함.


제대로 압축 해제가 되었음을 알 수 있습니다.

+ Recent posts