-
반응형
운영체제와 프로그래밍
- 기계어에서는 변수가 위치한 메모리 주소를 통해 변수 값을 읽거나 변경
- 컴퓨터 시스템의 메모리는 운영체제가 관리
- 운영체제가 메모리를 관리하는 방법에 따라 프로그래밍 방식도 바뀜
32비트 운영체제와 64비트 운영체제
- 운영체제에서 실행되는 프로그램을 32비트용(x86) 프로그램과 64비트용 프로그램(x64)으로 나누어 개발 가능
- 32비트용 프로그램은 32비트 운영체제와 64비트 운영체제에서 모두 동작(64비트 프로그램은 32비트 운영체제 동작 안함)
64비트 운영체제 장단점
[장점]
- 동시 처리 능력이 좋음
- RAM을 16GB(엑사바이트, 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