1. 시작하기

더보기

1.1 <프로그래밍> 학습 관점

 

블로그관리 | BasicLike

 

티스토리

좀 아는 블로거들의 유용한 이야기, 티스토리. 블로그, 포트폴리오, 웹사이트까지 티스토리에서 나를 표현해 보세요.

www.tistory.com

 

 

 

 

1.2 C 언어를 접근하는 관점

 

 

"C 언어" 라는 프로그래밍 언어는 1970년대, "컴퓨터를 사용한다는 것"이 "하드웨어와 소프트웨어를 만든다는 것"과 동일한 의미일 때 등장한 "오래된 프로그래밍 언어" 입니다. 

 

심지어 하드웨어와 소프트웨어의 개념조차 명확히 구분되지 않던 시기에 

"컴퓨터 동작 구조 이해 정도는 기본 소양으로 갖춘 엔지니어가, 컴퓨터라는 전자 계산 하드웨어에 효율적으로 명령을 내리고 관리(운영체제)하는 소프트웨어를 만들기 위해"를 위해 등장했던 언어입니다. 

 

2024년 오늘처럼 소프트웨어와 하드웨어가 명확히 구분된 상태에서 등장하여, 효율적인 프로그램 개발을 위해 응용 소프트웨어 개발자를 대상으로 등장한 프로그래밍 언어들과 목적이 다릅니다. 

 

그렇기 때문에, C 언어를 학습하시려면

1970년대의 개발자들처럼, 컴퓨터 동작 구조를 이해가 먼저입니다. 

 

 

 

 

1.3 포인터를 접근하는 관점

 

 

1.3.1 포인터 학습은 아래 개념을 이해한 후 시작해야 합니다.

 

  • 이진수, 비트, 바이트, 16진수
  • <프로그래밍> 빌드, 컴파일, 링킹(함수) 
  • <컴퓨터 동작 구조> 실행 개념과 메모리, CPU 동작구조
  • <프로그래밍 언어> 어셈블리, 기계어
  • <C 언어> 자료형과 함수

 

 

1.3.2 프로그램이 실행 관점에서,

메모리의 논리구조와, 함수의 동작 구조에서 메모리 주소값을 사용할 수 밖에 없는 이유를 찾아 납득해야합니다.

 

 

 

 

1.4 포인터 학습 목표

 

C 언어 소스코드를 볼 때, "메모리 구조"를 머리 속에 그릴 수 있어야 합니다. 

포인터는 역참조를 위해 존재합니다. 

(= 포인터 변수의 역참조는 일반 변수 사용과 동일한 기능입니다.)

 

 

2. 컴퓨터란?

더보기

 

  • 다양한 "명령어 덩어리"(== 응용 소프트웨어)를 실행하는 디지털 계산 기계다.
  • 실행은 CPU 와 Memory

 

 

2.1 컴퓨터는 OOO 가능한 계산 장치다.

 

 

하드웨어란?

  • (컴퓨터를 구성하고 있는) 기계 장치다

소프트웨어란?

  • 데이터를 하드웨어로 처리하는 방법과 순서(로직)가 기술된 명령문이다.

개발자란?

  • 소스코드 로직으로 하드웨어를 제어하는 소프트웨어를 만드는 사람이다.

컴퓨터란?

  • 계산기는 정해진 사칙연산 로직 하나만 수행하는 계산 기계다.
  • 컴퓨터는 다양한 응용 소프트웨어의 로직을 수행할 수 있는 계산 기계다.

 

 

 

 

2.2  컴퓨터 구조와 부품 중, 실행 관점에서 CPU 와 Memory 이해

 

 

 

 

 

 

2.3 정리

  • CPU, RAM(주 저장장치), Storage(보조 저장장치) 와 같은 컴퓨터 내부 구조를 파악한다.

 

 

3. 이진수

 

 

4. 빌드와 실행 그리고 메모리

더보기

 

4.1 빌드 

 

 

 

 

 

4.2 실행

 

 

 

 

 

4.3 저장 장치 (보조 기억 장치,Storage)

 

 

 

 

 

4.4 메모리 (주 기억 장치, RAM)

 

 

 

5. 메모리 주소

더보기

 

5.1 비트, 바이트, 메모리 주소의 개념

 

 

 

 

 

 

5.2 "메모리 주소 값" 데이터 크기

 

 

 

2^32 = 4,294,967,296(약 43억) - 32bit CPU 에서 최대 메모리 크기가 4GB인 이유

2^64 = 18,446,744,073,709,551,616 (약 1844경)

 

 

32bit 기반, 운영체제에서  

  • 메모리의 주소(포인터)는 4byte (32bit = 8bit × 4byte) 크기를 가진다.
  • 포인터 변수는 4byte 크기를 가진다.

64bit 기반, 운영체제에서 

  • 메모리의 주소(포인터)는 8byte (64bit = 8bit × 8byte) 크기를 가진다.
  • 포인터 변수는 8byte 크기를 가진다.

 

 

6. C 언어 자료형과 메모리

더보기
  • C 언어 소스코드를 볼 때, "메모리 동작"을 머리 속에 그릴 수 있어야 합니다.
  • "빌드 개념을 이해했다."고 가정합니다.

 

6.1 기본 자료형 사용법

 

#include <stdio.h>

int main(void)
{
    char cNum = 65;             // char형 변수 cNum 선언
    printf("cNum: %d\n", cNum);

    int iNum = 90;              // int형 변수 iNum 선언
    printf("iNum: %d\n", iNum);

    return 0;
}

 

 

 

 

6.2 메모리 주소 이해 (1) - Char  자료형

 

정수 65 == 이진법 100 0001

 

- cNum 이라는 변수명을 사용할 때, 65 라는 값이 들어있을 것이라 가정하고 프로그래밍 하게 됩니다.

  • 정수 십진법 65 == 이진법 100 0001
  • char 자료형 크기(1byte)만큼 메모리를 사용하고,
  • 65 라는 값을 메모리에 이진수로 저장하여,
  • cNum이라는 변수명으로 참조하겠습니다.

 

 

 

 

6.3 메모리 주소 이해 (2) - int 자료형

 

정수 90 == 이진법 101 1010

 

- iNum 이라는 변수명을 사용할 때, 90 라는 값이 들어있을 것이라 가정하고 프로그래밍 하게 됩니다.

  • 정수 십진법 90 == 이진법 101 1010
  • int 자료형 크기만큼 메모리를 사용하고,
  • 90 라는 값을 메모리에 이진수로 저장하여,
  • iNum이라는 변수명으로 참조하겠습니다.

 

 

 

 

6.4 컴퓨터는 변수명이 필요한가?

 

- 컴퓨터는 프로그래밍 언어의 변수명이 필요없다.

- 프로그래밍 언어의 변수명과 10진수는 인간의 관점에서 필요합니다.

 

 

추가

요약

체크리스트

가상메모리 os 프로세스