[C++] 메모리 영역 그려보기 _ 1차 퀴즈
✨ Q2. 16진수 0012FEAC로 시작되어 0012FED0으로 끝나는 메모리 영역을 그려라. 즉, 0012FEAC로 시작하여 4를 더한 값을 적고 또 4를 더해서 적고 .. 0012FED0가 될 때까지 반복할 것
밑 코드를 그림에 나타내라.
#include <iostream>
using namespace std;
bool isEven(int y);
int main()
{
char A[6]="GRACE";
int i=5;
short s=7;
double d=88.7;
bool b=isEven(i);
}
bool isEven(int y)
{
bool result = (y%2 == 0);
return result;
}
A2.
🎀 Q. 왜 한 줄의 메모리가 4byte일까 ?
16진법을 나타내기 위해서는 0 ~ F (15) 가 필요하다. 이는 1111 (2^0+2^1+2^2+2^3=15) 로 표현할 수 있다.
즉 4byte가 필요한 것인데, 1byte는 8bit 이므로 총 32bit의 머신이 필요한 것이다.
char A[6]="GRACE";
위의 A 배열은 널값을 포함하여 총 6칸을 차지한다. 그러므로 총 두줄을 활용해야한다. 남은 칸은 사용하지 않는 칸, memory padding 으로 남겨둔다.
🎀 Q. memory padding 을 해야하는 이유는 ?
A. 메모리 패딩(Memory Padding)은 컴퓨터 과학에서 메모리 구조를 조정하는 기술 중 하나입니다.
이 기술은 구조체(Struct)와 같은 복합 데이터 타입을 메모리에 저장할 때 사용됩니다.
구조체는 여러 개의 필드(Field)로 이루어져 있으며, 이 필드들은 메모리 상에서 연속적으로 배치됩니다. 그러나 각 필드의 크기는 일정하지 않을 수 있으며, 메모리 상에서 각 필드의 시작 위치는 메모리의 정렬(Alignment) 규칙에 따라 다를 수 있습니다.
메모리 패딩은 이러한 정렬 규칙을 따르기 위해 사용됩니다. 메모리 패딩을 하면 각 필드의 시작 위치를 정렬된 위치로 맞출 수 있습니다. 이렇게 하면 프로세서가 메모리에 접근할 때 효율적으로 데이터를 읽을 수 있으며, 성능 향상에 도움을 줍니다.
또한, 메모리 패딩은 일부 하드웨어에서 발생하는 버그와 호환성 문제를 해결하기 위해 사용될 수도 있습니다. 예를 들어, 몇몇 CPU에서는 정렬되지 않은 데이터를 처리할 때 오류가 발생할 수 있습니다. 메모리 패딩을 사용하면 이러한 문제를 예방할 수 있습니다.
int& rI = i; // passbyreference
또한 위의 코드는 참조변수이기 때문에 새로운 메모리를 할당하지 않고 i의 메모리를 같이 사용한다.
int main()
{
bool b=isEven(i);
}
bool isEven(int y)
{
bool result = (y%2 == 0);
return result;
}
isEven 의 함수가 호출되어 밑의 isEven 함수를 읽어준다. 여기서 중요한 점은 bool 함수기 때문에 결과값이 True와 False로 나온다는 점과 isEven이 끝나고 결과값을 얻고 나면 메모리에 할당된 y와 result의 값이 pop 된다는 점이다.