malloc : 메모리 할당 함수 (함수) void * malloc(size_t size);

  • 메모리 공간만 할당 , 생성자 호출 X
  • 할당받을 메모리 크기를 인자로 받는다.
  • malloc은 할당된 공간의 값을은 바꾸지 않는다.

calloc : 메모리 할당 및 초기화 함수 (사이즈하고, 타임) void* calloc(size_t nelem, sizeo_t elsize);

  • 배열요소 갯수,배열요소 사이즈
  • calloc은 할당된 공간의 값을 모두 0으로 바꾼다.
  • 배열을 할당하고 모두 0으로 초기화할 필요가 있을경우에는 calloc을 쓰면 편하다

realoc : 메모리 추가 할당 (덩글리 포인트 발생 할 수 있음) void realloc(void ptr, size_t size);

  • 이미 할당받은 메모리에 추가로 할당, 이전 메모리 주소 없어짐
  • 주소, 추가할당할 사이즈
  • 대부분 새로운 메모리를 할당하므로, 이전 영역을 가리키는 모든 포인터 변수를 새로운 주소로 가리켜야 한다.
  • 동적으로 할당한 메모리가 있고 여러 개의 포인터가 공유하고 있다면, 사용X

free : 메모리 해제 함수 void(* ptr);


new (연산자재정의)

  • 연산자로 바로 메모리를 할당하는게 아니라 생성자를 호출하여 메모리를 할당합니다
  • 할당할 메모리 크기 몰라도됨
  • 생성자를 호출
  • 재할당이 불가능 하다

프로그래밍

  • 목적에 맞는 알고리즘으로부터 프로그래밍 언어를 사용하여 구체적인 프로그램을 작성하는 과정을 의미
  • 작성된 소스 파일은 먼저 실행파일로 변환되어야 실행 할 수 있다.

소스파일에서 실행 파일을 생성하는 순서

 

 

  1. 소스 파일(source file)의 작성
  2. 선행처리기(preprocessor)에 의한 선행처리
  3. 컴파일러(compiler)에 의한 컴파일
  4. 링커(linker)에 의한 링크
  5. 실행 파일(executable file)의 생성

소스 파일(source file)의 작성

  • 프로그래밍에서 가장 먼저 해야 할 작업은 바로 프로그램을 작성하는 것입니다.
  • 다양한 에디터를 사용하여 C++ 문법에 맞게 논리적으로 작성된 프로그램을 원시 파일 또는 소스 파일이라고 합니다.
  • C++을 통해 작성된 소스 파일의 확장자는 대부분 .cpp 가 됩니다.

선행처리기(preprocessor)에 의한 선행처리

  • 선행처리(preprocess)란 소스 파일 중에서도 선행처리 문자(#)로 시작하는 선행처리 지시문의 처리 작업을 의미합니다.
  • 이러한 선행처리 작업은 선행처리기(preprocessor)에 의해 처리됩니다.
  • 선행처리기는 코드를 생성하는 것이 아닌, 컴파일하기 전 컴파일러가 작업하기 좋도록 소스를 재구성해주는 역할만을 합니다.

컴파일러(compiler)에 의한 컴파일

  • 컴퓨터는 0과 1로 이루어진 이진수로 작성된 기계어만을 이해할 수 있습니다.
  • 소스 파일은 개발자에 의해 C++ 언어로 작성되기 때문에 컴퓨터가 그것을 바로 이해할 수는 없습니다.
  • 따라서 소스 파일을 컴퓨터가 알아볼 수 있는 기계어로 변환시켜야 하는데, 그 작업을 컴파일(compile)이라고 합니다.
  • 컴파일은 C/C++컴파일러에 의해 수행되며, 컴파일이 끝나 기계어로 변환된 파일을 오브젝트 파일(object file)이라고 합니다.
  • 이러한 오브젝트 파일의 확장자는 .o 나 .obj 가 됩니다.

링커(linker)에 의한 링크

  • 컴파일러에 의해 생성된 오브젝트 파일은 운영체제와의 인터페이스를 담당하는 시동 코드(start-up code)를 가지고 있지 않습니다.
  • 또한, 대부분의 C++ 프로그램에서 사용하는 표준 라이브러리 파일도 가지고 있지 않습니다.
  • 하나 이상의 오브젝트 파일과 라이브러리 파일, 시동 코드 등을 합쳐 하나의 파일로 만드는 작업을 링크(link)라고 합니다.
  • 링크는 링커(linker)에 의해 수행되며, 링크가 끝나면 하나의 새로운 실행 파일이나 라이브러리 파일이 생성됩니다.
  • 이처럼 여러 개의 소스 파일을 작성하여 최종적으로 링크를 통해 하나의 실행 파일로 만드는 것을 분할 컴파일이라고 합니다.

실행 파일(executable file)의 생성

  • 소스 파일은 선행처리기, 컴파일러 그리고 링커에 의해 위와 같은 과정을 거쳐 실행 파일로 변환됩니다.
  • 최근 사용되는 개발 툴은 대부분 위에서 소개한 선행처리기, 컴파일러, 링커를 모두 내장하고 있으므로 소스 파일에서 한 번에 실행 파일을 생성할 수 있습니다.
  • 이렇게 생성된 실행 파일의 확장자는 .exe 가 됩니다.

 

 

 

+ Recent posts