물론 스크립트 언어로 말고 코어단쪽일 경우 ㅇㅇ
게다가 PS4 나 스위치 컴파일러의 경우엔 예외처리나 RTTI 사용이 기본 금지되어 있어서
클래스 생성할 때도 무거운 타입은 생성자만으로는 안되니까 C에서 구조체 객체를 미리 만들고 그 뒤에 안에 데이터 넣는 것 처럼
two-phase construction 하는 건 기본으로 깔고 들어가는 것 같음.
메모리의 경우에도 일반 malloc/free 쓰지 않고, 아예 게임 부팅할 때 메모리 풀을 준비해서 미리 할당된 메모리 안에서만 씀.
PS4 나 스위치의 경우엔 옛날같이 메모리 1기가 제한 512MB 제한보다는 많이 나아졌지만서도
그래도 유저공간 메모리 4GB, 2GB 안에서 다 해결하도록 해야한다고 들었음.
물론 C++11 들어가서는 람다도 쓰고 템플릿 메타도 많이 쓰고 독자 리플렉션 떡칠한다고 상속도 많이 쓰는데,
그래도 STL 막 쓰느니 하는건 안됨... 알고리즘 계열은 간혹 쓰긴 하지만,
STL 컨테이너나 스레드, 아토믹 처리 등등은 대개 게임용 STL 퍼와서 개조하거나, 스스로 구현함.
콘솔게임이라 그런거 아님?
콘솔게임이라 그런듯 근데 PC도 별반 다를바 없을 것 같은데
해당 댓글은 삭제되었습니다.
two-phase construction 이 evil 이라고 하면 생성자 실패하면 어떡하라고...? no-exception 이 기본사항인데
걍 static New쓰면 안됨?
static new 도 밖에서 일일히 객체 생성하고 그 뒤에 데이터 작성 코드 적는 two-phase construction 을 함수 안에다가 집어넣은 느낌 일텐데
New 내부를 다 까봐도 일단 한번 생성자가 호출되면 무조건 consistent한 상태인건 확실하잖음
뭐 per thread free list pool쓰는건 대부분 비슷할껀데 너네는 thread 0이 소유하고있는 pool에서 할당된 메모리 thread 1이 free해줘야되는상황 어케처리함? thread 0이 소유하고있는 pool에 atomic하게 넘김? 아니면 thread 1이 수거해가서 재사용함? 겜은 프레임뽑아야되니까 성능>보수적인 메모리사용 이라 당연히 후자일라나?
이상적이라면 후자같긴 한데, 보통 큰 성능 지장이 없다면 전자를 쓰지 않을까 생각함.
그래? 상당히 의외네. 겜클라에서 default는 후자 + 만약 재사용안되고 일정크기 쌓이면 global pool에 다시 넘겨줄거라고 예상했는데 그렇게까지 쥐어짜진 않나보네.
아직 뉴비라서 확실한건 아니고... 머릿속으로 어떻게 수거해서 재사용할지 방법이 안떠오르고 메모리 풀 자체를 여러 스레드에서 접근하게 해야한다면 락프리하게 하던지 아토믹하게 하던지 해야하니까 전자라고 봤어요
어떻게 수거를한다니? 그냥 thread1에서 free호출되면 thread1이 소유하고있는 블락에 넣으면 되잖아. 그러다가 thread1에서 똑같은사이즈 malloc되면 위에같은상황에서 수거한 메모리들 넘겨주면되고. 만약 모아놓은 메모리들이 일정수이상 넘어가면 global pool에 chunk 넘겨주고. 다른스레드에서 메모리 다썻으면 그 chunk 넘겨주고. tcmalloc도 옛날에 이렇게구현되서 한번 할당된 메모리 절대로 os에 못돌려줬었음. 어케바꼈는진 못뜯어봤지만 요즘은 os에 메모리 반환하긴 하는거같은데.
아 그런 의미였네용 난 또 어렵게 생각해가지고
저 메모리 4gb 안에 texture나 vertex 정보 다 포함된 거임?
PS4 는 GPU 자체에 VRAM 없어서 (...PS4 GPU does not have any VRAM memory, because it uses system RAM memory for graphics operations...) 그냥 다 포함인 것 같은데
그런 렌더링 데이터 포함해서 4gb면 너무 빡빡한 거 아닌가
그래서 pc하고 콘솔 성능차 심한거 많이 볼 수 있잖음
찾아보니까 4.5기가 + 512MB = 최대 5기가네
https://www.eurogamer.net/articles/digitalfoundry-ps3-system-software-memory
내가 게임을 잘 안해서 그런데, 머가 더 빠른 거임 그러면?
대개 pc가 당연히 빠르지 램도 대개 빵빵하고 하드웨어 자체가 확장이 가능한데.
쓸 줄 안다 모른다 문제보단 걍 안전한 쪽으로 하는거 같은데 돈 걸린 문제니까