학점은행제/시스템프로그래밍

[시스템프로그래밍] 64비트 기반 프로그래밍2

단비_danbee 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 : 부호가 없는 정수형

 

32비트와 64비트 파일을 다운로드하는 경로

  • 유니코드와 아스키코드(128개)를 공통으로 지원함
  • 한글은 받침도 많아서 아스키코드로는 표현이 불가능함
  • 아스키코드 : 숫자, 영문자, 특수문자만 지원하고 나머지는 지원이 불가능함
  • 아스키 코드로는 한국어, 프랑스어 표현 불가능
  • 유니코드를 사용하기 때문에 전세계 언어를 표현할 수 있게됌

 

Polymorphic 자료형

  • "다양한 모습이 있는" 또는 "다형적" 이라는 뜻
  • 어쩔때는 32비트 어쩔때는 64비트로 변화하는 자료형
  • 상황, 환경에 따라 유동적으로 변형됌
  • PTR 포인터 값 기반의 산술연산을 위해 정의된 자료형임
  • 32비트와 64비트는 포인터 정밀도가 달라 발생하는 문제 해결