[Week4] 공부 키워드

안나경·2024년 2월 4일

크래프톤정글

목록 보기
25/57

[C언어] 포인터를 사용하는 이유

포인터

C언어에서,
특정 블록 내 외에서도
데이터를 공유할 수 있도록,
메모리 주소를 공유하는 포인터를 사용한다.

항상 필요한 것은 아니지만,
메모리에 직접 접근하는 경우나 동적 할당 메모리 사용 등에서
포인터가 필요하다.

  1. 변수의 값을 인자로 전달하지 않으면 전달되지 않음.
  2. 변수를 전달하여도, 이름이 같아도 함수가 다르면
    메모리에서 별도의 저장 공간을 확보하여 전혀 다른 변수처럼 작용.
    (반환 시 반환하는 값의 갯수는 꼭 하나라서 두개를 반환할수도 없음!)

그래서 대개
함수에서 *인자
로 받고,
넘겨줄 때도 &인자로 넘겨준다.
함수 내에서도 *인자로 사용한다.

가상화란 무엇일까요?

가상화(virtualization)

실물 컴퓨팅 자원을
마치 여러개인 것처럼 쪼개서 가상으로 사용하거나,
여러개의 실물 컴퓨팅 자원을 하나의 자원처럼 사용하는 경우.

컴퓨팅 자원은,
CPU, 메모리, 스토리지, 네크워크 등
컴퓨터를 구성하는 요소들을 가리킨다.

(예를 들아, 1000GB를 5개의 스토리지처럼 사용하거나,
300GB 스토리지를 구입해 하나의 1300GB 처럼 동작하게 하거나.)

예를 들어,
클라우드 플랫폼에서는
사용자에게 가상 CPU를 할당하여 장소 제약없이 사용 가능,
성능이 부족하연 할당 받아 성능을 높이기 등이 가능하다.
어떤 하나의 가상환경에 문제가 생겨도, 분리되어있어 영향을 끼치지않는다!

(이후 가상화 등장 내용)
(하드웨어 하나당 서버 하나만 돌린다면
나머지 빈 공간이 생길텐데,
만약 하나의 하드웨어를 가상화로 여러개의 서버를 돌릴 수 있다면
효율성이 높아지는 것을 설명.)
(VM부터 컨테이너 등장.)

[Linux] 리눅스 gcc란? gcc로 C언어 컴파일하기
출처: https://code-lab1.tistory.com/368 [코드 연구소:티스토리]

GCC (GNU Compiler Collection)

리눅스에서 사용하는 컴파일러 모음.
전처리, 컴파일, 어셈블리, 링킹 단계를 거쳐 컴파일을 한다.

-o : 에 실행 결과를 저장한다. 이 옵션을 주지 않으면 a.out이 기본 이름으로 적용된다.
-E : 전처리 단계만 실행하고 결과를 화면에 출력한다. 파일(.i)로 저장하려면 -o 옵션과 함께 사용해야 한다.
-S : 컴파일 단계까지만 실행하고 어셈블리어 파일(
.s)을 저장한다. (어셈블리X 링킹 X)
-c : 어셈블리 단계까지만 실행하고 오브젝트 파일(*.o)을 저장한다. (링킹 X)
-l : 라이브러리 파일을 링크한다.
출처: https://code-lab1.tistory.com/368 [코드 연구소:티스토리]

이 때 여러 소스코드 파일과 헤더 파일을
하나의 실행파일로 변환하다고 할때,
각각의 소스코드 -> 오브젝트 파일로 변환,....
하지만,
매우 번거로우므로

Makefile 을 이용한다.

[Linux] 리눅스 Makefile 만들기, make 사용법, make clean

 <target> : <prerequisites>
   		<recipe>

target : 일반적으로 프로그램에 의해 생성되는 파일의 이름이다. 혹은 'clean' 과 같이 수행할 작업의 이름이 되기도 한다(이에 대해서는 아래에서 설명)
prerequisites : target을 생성하기 위해 사용되는 인풋(input) 파일들이다. 혹은 target이 의존(depends on)하는 파일들이다. 
recipe : make 프로그램이 실행하는 명령이다. recipe 라인에는 꼭 tab 문자를 앞에 넣어줘야 한다.
출처: https://code-lab1.tistory.com/370 [코드 연구소:티스토리]

예시.

app.out : hello.o world.o main. o
          gcc -o app.out hello.o world.o main.o

더 쉽게 쓰고 싶다면, 내장 규칙을 사용.

포인터 연산

포인터의 연산

포인터는 값을 증가시키거나
감소시키는 등의 제한된 연산만 할 수 있다.

  • 포인터끼리 덧셈, 곱셈, 나눗셈은 아무런 의미가 없다.
  • 포인터끼리 뺄셈은 두 포인터 사이 상대적 거리.
  • 정수를 더하거나 뺄수 있으나, 실수는 불가.
  • 포인터끼리 대입이나 비교 가능.

동적 메모리 할당

[C언어] 동적 메모리 할당 개념 잡기

이진 탐색 트리

이진탐색트리(Binary Search Tree)

레드 블랙 트리의 삽입/삭제

malloc, calloc, realloc

profile
개발자 희망...

0개의 댓글