• 2022. 5. 12.

    by. 데브촙

    반응형

    운영체제와 프로그래밍

    - 기계어에서는 변수가 위치한 메모리 주소를 통해 변수 값을 읽거나 변경

    - 컴퓨터 시스템의 메모리는 운영체제가 관리

    - 운영체제가 메모리를 관리하는 방법에 따라 프로그래밍 방식도 바뀜

     

    32비트 운영체제와 64비트 운영체제

    - 운영체제에서 실행되는 프로그램을 32비트용(x86) 프로그램과 64비트용 프로그램(x64)으로 나누어 개발 가능

    - 32비트용 프로그램은 32비트 운영체제와 64비트 운영체제에서 모두 동작(64비트 프로그램은 32비트 운영체제 동작 안함)

    64비트 운영체제 장단점

    [장점]
    - 동시 처리 능력이 좋음
    - RAM16GB(엑사바이트, 2^60)까지 사용 가능 (32bit 4GB, 2^32)

    [단점]

    - 기본적인 메모리 사용량이 많음(비효율적 메모리 사용)

    - 32비트 프로그램과 호환하기 위한 모듈까지 관리해야 하기 때문에 낮은 사양의 컴퓨터에 설치하면 부하가 가중되서 효율 떨어짐

     

    메모리를 비효율적으로 사용할 가능성이 높아지고 호환성이 떨어져 아직까지도 많은 개발자들이 32비트 방식으로 프로그램을 개발하고 있다.

    32비트 프로그래밍에서는 int형이 32비트(4바이트)이고, 주소를 저장하거나 사용할 때 4바이트 단위로 표현한다

     

    메모리의 주소 지정 방식

    - 운영체제는 메모리 주소를 1바이트 단위로 관리

    - 32비트 윈도우 운영체제는 0 ~ 4,294,967,295번까지의 주소 사용

    - 메모리를 사용하려면 반드시 사용할 메모리 주소를 지정해야 함

    - 메모리를 사용할 때 한번에 읽거나 저장할 크기를 명시해야함

    직접 주소 지정 방식

    - 메모리를 사용할 때 프로그래머가 사용할 메모리 주소를 직접 적는 방식

    ex. ‘102번지에 1042라는 값을 바이트 크기로 저장하겠다

     

    1042가 왜 4와 18로 나뉘어지는가?

    - 1042 값은 8비트에 저장할 수 없기 때문에 두 개의 8비트에 나누어 저장

    - 102번지에 18, 103번지에 4 저장

    - Windows 운영체제는 Little Endian로 바이트 정렬

     

     

    16진법으로 메모리 형태 표시하기

    C 언어에서는 2진수를 직접 사용하는 방법을 제공하지 않음

    2진수에 가장 가까운 표현법인 16진수를 주로 사용

    16진수 한 자릿수는 4비트(2^4 = 16)로 표시 가능

    16비트 두 자리는 1바이트를 의미

    16진수로 표현된 숫자는 바이트 단위로 나누기 편함

     

    직접 주소 지정 방식은 C언어의 '변수' 문법과 같다

    - C 언어는 변수라는 개념으로 직접 주소 지정 방식을 사용

    - C 언어에서 변수를 사용하면 변수에 값을 대입하는 소스 코드가 어셈블리 형태의 기계어로 번역됨

    short birthday; // birthday가 메모리 0x00000066에 위치한다고 가정
    birthday = 0x0412 // move word ptr[0x00000066h], 0412h로 번역함

     

    - C언어가 주소를 사용하지 않고 변수라는 개념을 사용하는 이유는?

    메모리 주소 대신 변수 이름을 사용하면 코드를 더 쉽게 이용 가능하니까.

     

    -C 언어에서 직접 주소 지정 방식의 한계

    C 언어의 직접 주소 지정 방식은 변수 개념을 사용하기 때문에 문법 구조상 서로 다른 함수에 존재하는 변수 참조 불가

    #include <stdio.h>
    
    void Test()
    {
    	short A = 0x0000;
    	A = B;	// 오류
    }
    
    void main()
    {
    	short B = 0x0005;
    	Test();
    }

    - 함수의 매개변수와 반환값을 이용하여 서로 다른 함수에 존재하는 지역 변수들 간에 값을 전달 가능

     

     

    #include <stdio.h>
    
    void Test(short data)
    {
    	short A = 0x0000;
    	A = data;
    }
    
    void main()
    {
    	short B = 0x0005;
    	Test(B);
    }
     

     

    간접 주소 지정 방식

    10진법 버전

     

    16진법 버전

    반응형

    'C' 카테고리의 다른 글

    포인터(Pointer) -1  (0) 2022.05.13
    2차원 배열 응용  (0) 2022.05.11
    2차원 배열  (0) 2022.05.09