tddhot2   6년 전

문제를 풀 때, 메모리초과를 예측하기 위해서 만약 int형 배열의 크기가 10이다. 이러면

4byte*10 = 40byte이런식으로 계산하는데요.

벡터랑/스택 같은 경우도 위와 마찬가지로 계산하거든요.


근데, 허용 메모리량이 128mb이고,

vector<int> g[10001];
stack<int> stk;
int di[10001] = { -1, };
int idx[10001] = { 0, };
int n, m;
int Max = 0;

이렇게 사용하고, 특히, 벡터에는 최대 100,000개까지의 데이터만 들어가고, stk에도 최대 100,000개까지의 데이터가 들어갑니다.

그렇다면, 4byte*(200000) = 8000000인데 이는 8mb로 계산이되어지는데...

그럼 남은 120mb나 벡터와 스택의 나머지에서 쓰이는 걸까요? ㄷㄷ;;;

굉장히 혼란스럽습니다..

kyhdudgns113   6년 전

1. 변수 뿐만 아니라 함수를 호출할때도(비록 지역변수가 없을지라도) 메모리가 소모됩니다. 재귀함수를 쓴다면 호출하는만큼 메모리를 더 잡아먹겠죠. 물론 함수가 리턴을 하면 그 메모리는 다시 자연으로(?) 돌아갑니다.

2. 아무래도 vector 나 stack 이라는 클래스 내에 int 말고도 다른 무언가가 많이 들어가있겠죠?

topology   6년 전

stack은 default container가 deque인데, deque가 메모리를 많이 잡아먹는 것으로 알고 있습니다.

yukariko   6년 전

윗분들 말씀도 옳지만

1325번 문제를 말씀하시는거라면

https://www.acmicpc.net/source...

저도 저런코드를 작성해서 2MB로 해결했습니다. 그러니 다른코드의 문제로 보입니다.

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