-
[시스템프로그래밍] 64비트 기반 프로그래밍2학점은행제/시스템프로그래밍 2021. 1. 18. 16:09
데이터 손실 1
- 데이터를 송수신하는 버스의 크기가 64차선이냐 32차선이냐에 따라 64비트, 32비트를 구분 할 수 있다
- 소주잔을 맥주잔에 담을 수 있지만 맥주잔을 소주잔에 담을 수 없듯이 정수형 크기 40바이트를 4바이트에 담을 수 없다.
- 주소값을 출력하기 위해 int 변수 지정
- 32 비트 시스템에서 정상 출력되는 int, pointer -> 4byte
- 64비트 pointer -> int, long 4byte 정수형 형변환 불가능
- *포인터(pointer)는 프로그래밍 언어에서 다른 변수, 혹은 그 변수의 메모리 공간주소를 가리키는 변수를 말한다.
#include <stdio.h> int main(void) { int arr[10]={0}; // 배열의 크기 10자리를 만들어 놨다 - 40바이트 //데이터 손실이 발생 int arrVal = (int)arr; //배열의 명 - 4바이트 printf("pointer:%d\n", arrVal); return 0; }
데이터 손실 2
64비트 시스템
- LLP64가 기본 모델
- int : 4byte, pointer : 8byte 로 표현함
- 형변환 과정에서 데이터 손실 발생
- 32bit는 메모리 크기가 4GB 임
- 따라서 32bit 로 4GB 이상 표현 불가능
Windows 스타일 자료형을 사용하는 이유
- 다른 시스템으로의 이식성을 고려할 경우
- 프로젝트의 성격 및 특성에 맞게 새로운 이름으로 자료를 정의함
- # 전처리지시자
기본 자료형에 대한 MS 정의
선언의 편리성
- typedef 는 복잡한 선언을 단순화함 ex ) typedef undigned int size_t
- unsined int -> size t 간결하고, 보다 강한 의미를 부여함
- *typedef는 C와 C++ 프로그래밍 언어의 예약어이다. 다른 자료형의 별명을 만들기 위해 사용된다.
확장의 용이성
- 프로그램 전체에 적용된 내용 변경 시
- typedef unsigned char STR_LEN 변경 전
- typedef unsigned int STR_LEN 변경 전
- 아스키코드는 8비트(=1바이트)의 공간만 있으면 문자를 표현 할 수 있다
- 여러군데 수정해야할 것들을 한번에 재정의 할 수 있어서 편리하다
*Unsigned : 부호가 없는
*signed : 양수 또는 음수 부호가 있는
포인터에 대한 Windows 정의
자료형에 대응하는 포인터 자료형
- * : 아스트리커
- P : 포인터 변수를 의미함
- U : unsigned
- INT : 부호가 있는 정수형
- UINT : 부호가 없는 정수형
- 유니코드와 아스키코드(128개)를 공통으로 지원함
- 한글은 받침도 많아서 아스키코드로는 표현이 불가능함
- 아스키코드 : 숫자, 영문자, 특수문자만 지원하고 나머지는 지원이 불가능함
- 아스키 코드로는 한국어, 프랑스어 표현 불가능
- 유니코드를 사용하기 때문에 전세계 언어를 표현할 수 있게됌
Polymorphic 자료형
- "다양한 모습이 있는" 또는 "다형적" 이라는 뜻
- 어쩔때는 32비트 어쩔때는 64비트로 변화하는 자료형
- 상황, 환경에 따라 유동적으로 변형됌
- PTR 포인터 값 기반의 산술연산을 위해 정의된 자료형임
- 32비트와 64비트는 포인터 정밀도가 달라 발생하는 문제 해결
'학점은행제 > 시스템프로그래밍' 카테고리의 다른 글
[시스템프로그래밍] 시스템 프로그래밍 프로젝트 디자인 (0) 2021.01.18 [시스템프로그래밍] 64비트 기반 프로그래밍 1 (0) 2021.01.15