언어/C++

[C++] 메모리 영역 그려보기 _ 1차 퀴즈

SOo • 2023. 3. 20. 20:02

✨ 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 된다는 점이다.