일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- return by reference
- c++ basic practice
- base from member
- increment operator
- diamond inheritance
- c++ multi chatting room
- std::cout
- conversion constructor
- virtual function table
- operator overloading
- pointer to member data
- virtual inheritance
- vector capacity
- std::ostream
- discord bot
- C++
- this call
- vector size
- constructor
- virtual function
- dynamic_cast
- std::vector
- member function pointer
- new&delete
- std::endl
- 더 지니어스 양면포커
- virtual destructor
- suffix return type
- delete function
- placement new
- Today
- Total
I'm FanJae.
[SYSTEM PROGRAMMING] WIN32와 WIN64 본문
1. 64비트와 32비트의 구분 방법
1-1. 구분의 두 가지 기준
① 한 번에 전송 및 수신할 수 있는 데이터의 크기 (I/O BUS)
- 한 번에 송수신 가능한 데이터의 크기에 따라서 32비트 시스템과 64비트 시스템이 나뉜다.
② 데이터 처리 능력 (CPU)
- CPU는 외부로부터 들어오는 데이터를 처리하는 능력에 대한 차이가 있다.
1-2. 32비트 -> 64비트
① 프로그래머 입장에서 볼 때 32비트->64비트
- 프로그램으로 표현할 수 있는 범위의 증가
- 표현할 수 있는 메모리의 전체 크기
- 여기서 고려할 점은 포인터의 크기는 크면 클 수록 좋다는 점과 버스의 크기를 고려해야 한다.
② 포인터 크기가 무작정 크면 발생하는 문제점
- 포인터의 크기는 128bit로 두었는데 버스를 64bit이면, 주소 정보를 전달할때, 메모리 전달시 2번의 연산이 발생한다.
- 이렇게 되면 시스템의 전체적 성능 저하가 발생한다.
- 만약 32비트 시스템에서 64비트 주소 표현을 한다고 생각해보자.
- 그러면, 하나의 주소 표현을 위해서 I/O BUS에 2번 전달을 해야한다. -> 상당한 성능 저하가 발생한다.
※ 메모리는 크면 클 수록 좋되, 버스에서 한번에 전송할 수 있는 데이터 크기 만큼 키워주는게 일반적이다.
- 32비트에서는 메모리가 충분하다는 가정하에서 표현할 수 있는 메모리의 크기는 32비트가 최고였을 것이다.
- 즉, 이는 4GB이다. 이에 반면 64비트면 2^64승 이다.
- 이론상 0번지부터 2^64-1 까지 표현이 가능한 아주 큰 범위이다.
결론 : 32비트에서 64비트로 넘어간 것은 프로그래머 입장에서 표현할 수 있는 최대 메모리의 증가라고 볼 수 있다.
1-3. 그렇다면 메모리 확장을 하지 않는다면 무의미한 행위인가?
- 주소 공간이 확장 된다는건 큰 의미가 존재한다. 애플리 케이션이 훨씬 더 큰 데이터 세트를 효율적으로 사용 가능하다.
- 또한, 한 번에 더 많은 데이터를 처리할 수 있어, 동일한 클럭 속도에서 더 많은 계산을 수행 가능하다.
- 일반적으로는 가상 메모리를 통해 이러한 메인 메모리(RAM)의 부족을 극복한다.
int _tmain(void)
{
TCHAR str[100];
_tscanf(_T("%s"),str);
_tprintf(_%("%s"),str);
return 0;
}
//
int _tmain(void)
{
TCHAR ch;
do
{
_tscanf(_T("%c", &ch);
_tprintf(_T("%c"),ch);
}while(ch != '\n');
return 0;
}
- 크기만 충분하다면 일반적으로는 전자(코드 기준 위)가 훨씬 편하다.
- 하지만, 메모리 공간이 충분하지 않은 상황(임베디드 시스템)의 경우, 메모리가 제한적이다.
- 따라서 메모리 공간이 넓어짐에 따라서 프로그래밍을 편하게 할 수 있다는 의미이기도 하다.
※ 프로그래머 입장에서는 32비트 컴퓨터는 포인터가 32비트, 64비트 컴퓨터는 포인터가 64비트인게 이상적이다.
'System Programming' 카테고리의 다른 글
[System Programming] 컴퓨터 구조의 접근방법 (3) | 2024.09.20 |
---|---|
[System Programming] 프로그램 구현 관점에서 64비트 기반 프로그래밍 / 오류의 확인 (0) | 2024.09.11 |
[SYSTEM PROGRAMMING] MBCS와 WBCS 동시 지원 (0) | 2024.09.03 |
[System Programming] Windows 에서의 유니코드 (1) | 2024.08.30 |
[System Programming] 프로그램의 실행과정 / 하드웨어 구성의 재접근 (0) | 2024.08.26 |