티스토리 뷰
✨ 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 된다는 점이다.
'언어 > C++' 카테고리의 다른 글
[C++] 동적할당 (Dynamic Allocation) (0) | 2023.04.09 |
---|---|
[C++] 배열 코드 과제 리뷰 (0) | 2023.03.29 |
[C++] 함수 오버로딩 (0) | 2023.03.20 |
[C++] 함수 자료리턴 (0) | 2023.03.20 |
[C++] 함수 자료전달 (0) | 2023.03.20 |