jooyeok42   4년 전

n은 1~100000까지이고


int** input = new int*[n + 1];
for (int i = 1; i < n + 1; i++) {
 input[i] = new int[3];
 }

이렇게 할때는 메모리 초과가뜨는데

input[100001][3]

으로 할때는 메모리초과가 안뜨고 정답이 되네요..

위에 동적할당이 왜 메모리를 더 잡아먹나요??

djm03178   4년 전

전자는 포인터가 10만 개 만들어지기 때문에 후자보다 약 0.8MB를 더 요구합니다.

kcm1700   4년 전

구현체에 따라 다르지만 new int[3]한다고 딱 12바이트만 사용하는 게 아니라 더 사용할 수 있어요. C memory management, dynamic allocation 등으로 찾아보세요.

kcm1700   4년 전

약간 부연하자면 많은 구현체에서는 동적할당 된 영역들의 관리를 위해 앞이나 뒤에 조금씩 정보를 더 붙입니다. 큰 alignment에 맞춰야 해서 더 쓰는 경우도 있고요.

댓글을 작성하려면 로그인해야 합니다.