RadarURL

32bit 윈도우에서 나타나는 메모리 부족 문제 해결방법

by JAESOO posted Jul 03, 2013
?

단축키

Prev이전 문서

Next다음 문서

ESC닫기

크게 작게 위로 아래로 댓글로 가기 인쇄
디스텐트 월즈는 참 많은 메모리를 요구하는 게임이고,

특히 쉐도우 올라오면서 더 많은 메모리를 요구 하는 거 같습니다.

그래서 32bit 컴터에서 이런 에러가 뜨죵. 
System.OutOfMemoryException: 메모리가 부족합니다.
위치: System.Drawing.Graphics.CheckErrorStatus(Int32 status)
위치: System.Drawing.Graphics.DrawImage(Image image, Rectangle destRect, Int32 srcX, Int32 srcY, Int32 srcWidth, Int32 srcHeight, GraphicsUnit srcUnit, ImageAttributes imageAttrs, DrawImageAbort callback, IntPtr callbackData)
위치: System.Drawing.Graphics.DrawImage(Image image, Rectangle destRect, Int32 srcX, Int32 srcY, Int32 srcWidth, Int32 srcHeight, GraphicsUnit srcUnit, ImageAttributes imageAttr)
위치: DistantWorlds.Types.GraphicsHelper.ScaleImage(Bitmap unscaledBitmap, Int32 width, Int32 height, Single alpha, Boolean lowQuality)
위치: DistantWorlds.Types.GraphicsHelper.SmoothImage(Bitmap image)
위치: DistantWorlds.Controls.MainView.SkCSmNNe3G(Bitmap& , Bitmap& , Galaxy , Double )
위치: DistantWorlds.Main.ResetGalaxyBackdrops()
위치: DistantWorlds.Main.ResetGalaxyBackdropsBackgroundThread()
위치: DistantWorlds.Main.aiX0zk9K0t()
위치: DistantWorlds.Main.ProgramLoop()

이 에러가 나는 이유는 가상 주소 공간이 부족해서 그렇습니다.
 
실제 메모리 아닌 이 가상 주소 공간은 소프트웨어 적으로 윈도우에 깔려있는 메모리 기법으로
기본적으로 알아 두셔야 할게 총4G가 할당되어 있습니다.

그리고 또 이 가상주소공간은 두가지로 나뉘는데
하나는 유저모드[User Mode] 또 하나는 커널모드[kernel Mode]라 합니다.

유저모드는 우리 즉, 사용자가 사용하는 곳이고,  2G가가 부여됩니다.

커널모드는 윈도우가 사용하는 곳이고, 똑같이 2G가 부여됩니다만, 요건 중요하지 않습니다.

중요한건 유저 모드 2G가 라는 건데, 저 오류가 이게 부족해서 생기는 문제입니다.
해서 요걸 즉, 유저모드를 3G가로 늘리고 커널모드를 1G로 줄이면 됩니다.

그리고 또 하나 할게, 실행 프로그램한테 말을 해줘야 합니다.
무슨 말을 하냐면 '유저모드를 3G로 늘려서, 네가 사용할 수 있는 메모리가 2G가 아니라 3G이니까, 마음껏 사용하렴'이라고 말을 해줘야 합니다.
즉, 실행프로그램이 사용하는 메모리 양의 최대치를 바꿔줘야 합니다.
(이렇게 늘릴려면 실제 메모리가 2G이상 되어야 합니다)

자, 어떻게 하냐.

먼저 유저모드를 3G로 늘리려면
바로 3G 스위치를 사용하시는 건데요. 일단 방법을 알려드릴게요.
윈도우 비스타와 7이 똑같습니다.
===================================================

To Enable the 3Gb Switch:
3Gb 스위치 사용할라면:
  1. Right-click Command Prompt in the Accessories program group of the Start menu. Click Run as Administrator.
  2. At the command prompt, enter "bcdedit /set IncreaseUserVa 3072"
  3. Restart the computer.
  1. 시작->보조프로그램->명령 프롬프트 관리자 권한으로 실행
  2. 해당 CMD에 입력"bcdedit /set IncreaseUserVa 3072"
  3. 컴퓨터 다시 시작
============================================================
그리고 앞서 설명한 것 처럼 실행파일에게 말을 해줘야 하기에
첨부파일의 Large Address Aware의 소프트웨어를 실행합니다.
Step1의 Select an Excutable 의 옆의 단추를 이용하여, 디스텐트 월즈 쉐도우의 실행파일로 지정합니다.
그리고 밑에 체크 박스에 체크가 되어 있는지 확인 하시고, 
Save 버튼을 눌러주면 됩니다.
=============================================================
그리고 실행하시고 플레이 하시면 됩니다.
긴건 설명이고, 해야 할건 요 두가지 밖에 없습니다.
아, 추가로 아셔야 될게
메트릭스 게임사의 스텝분이 말하시길
32bit 운영체제 쓰고 있다면 이렇게 3G 스위치로 하라고 합니다.
아울러 700star를 넘기는 은하에서 플레이 하지 말라고 하더군요;
메모리가 딸린답니다.  

그리고 이 방법이 안되면, 64bit로 바꾸랍니다.
64bit는 유저모드가 8TB라고 합니다. 80000G요.
물론 64bit 프로그램 돌릴 때 얘기지만,
32bit 프로그램 돌릴 때도 4G의 유저모드 메모리를 주죠. 
 
 
 
 
 
문제가 있다면 
바로 3g 스위치 꺼주세요. 
 
=================================================
To disable the 3GB switch:
3Gb 스위치 '끄기'로 할려면
  1. Right-click on Command Prompt in the Accessories program group of the Start menu. Click Run as Administrator.
  2. At the command prompt, enter "bcdedit /deletevalue IncreaseUserVa"
  3. Restart the computer.
  1. 시작->보조프로그램->명령 프롬프트 관리자 권한으로 실행
  2. 해당 CMD에 입력 "bcdedit /deletevalue IncreaseUserVa"
  3. 컴퓨터 다시 시작
=========================================
 
 
 
참조

 

출처 : http://betagam.danawa.com/bbs/board.php?bo_table=distantworlds&wr_id=20597&sca=%C1%A4%BA%B8%2F%C8%F9%C6%AE


Articles

1 2 3 4 5 6 7 8 9 10