C언어/문제풀다 하나씩

padding+바이트 문제 int char pointer 등

mcdn 2020. 5. 13. 16:12
반응형
<1번문제>

#include <iostream>
using namespace std;

int data[10];

int main()
{
	return 0;
}

int 는 4바이트

10개 있으니까 답은 40

<2번문제>

#include <iostream>
using namespace std;

double data[3];
char vect[10];
int dt[10];

int main()
{
	return 0;
}

double 8 char 1 int 4

8*3 + 10 *1 + 10 *4 = 74;

답은 74

<3번문제> padding 포함

#include <iostream>
using namespace std;

struct Node
{
	int x;
	char t;
};

Node vect[100];

int main()
{
	return 0;
}

struct 같은 구조체는 네모나게 잘린다고 했음

int 4

char 1이니까

가로로 4칸, 세로로 2칸짜리 8칸이 생겨남 한번 node 생길때마다

이게 100개짜리 배열로 만들어지므로 

100*8 = 800바이트

답 : 800

 

<4번문제> 64bit 컴파일 했을 때, padding 포함

#include <iostream>
using namespace std;

struct Node
{
	int x;
	char *next;
};

Node vect;

int main()
{
	return 0;
}

x64에서 컴파일 시 포인터의 크기가 달라짐

x86 에서는 4바이트 x64에서는 8바이트임

구조체에서 int 랑 char pointer이 만들어졌으므로 

네모나게 만들어져야함

x64에서는 포이터가 8바이트므로 가로는 8바이트로 설정 (8>int의 4)

세로는 두개이므로 2칸

한번 Node 가 만들어질때마다 16바이트가 만들어짐

현 문제에서는 vect 하나만 만들었으므로 16바이트~

답 : 16바이트!!

 

#include <iostream>
using namespace std;


int main() {
	int n;
	cin >> n;
	
	if (n == 1) cout << 40;
	if (n == 2) cout << 74;
	if (n == 3) cout << 800;
	if (n == 4) cout << 16;
}

!ㄲ

반응형