| [ CnUnix ] in KIDS 글 쓴 이(By): styi (에스띠) 날 짜 (Date): 1996년10월14일(월) 15시16분03초 KST 제 목(Title): DOS에서의 array size 문제 .. 음 ... DOS에서 아래처럼 했을 때, for (i = 0; i < N; i++) { mem[i] = (char *) melloc (256*256-1); } 과연 N이 얼마까지 갈 수 있을까요? xms 등의 옆차기를 하지 않는다면 최대 620KB 정도의 메인 메모리로 처리할 수 있는 용량은 얼마 안되죠... 저도 예전에 이런 문제로 골치가 많이 아팠어요. 예를 들어, 300KB의 메모리를 잡아야한다면 대책이 없지요.... 그냥 64KB 이하의 배열을 5개쯤 잡거나 해서 별 짓을 다해야 하는데 이렇게 되면 프로그래밍상의 호환성이 떨어져서 .. 천상 도스용으로만 돌려야지 .. 유닉스나 다른 머신에서는 그걸 그냥 쓰느니 다시 짜게 됩니다. 그런데 비교적 좋은 해결책이 있습니다. RAM drive를 쓰는 겁니다. 우리가 데이터를 메모리에 올리는 이유는 어디에 있습니까? operation 상의 편의점이 있지만 무엇보다 속도 측면이 많을 겁니다. 즉, 디스크에서 직접 읽고 쓰고 해도 연산 결과는 나오지만 이건 I/O operation이라 구질구질하고 느려터지죠. 하지만 ramdrive 한 4메가쯤 잡아놓고 여기에 표준 화일 입출력으로 처리하면 실제로는 메모리 operation이기 때문에 아주 깔끔하게 처리됩니다. 물론 함수가 조금 번거로워지긴 하죠. a[256][256] = 30; 대신 insert (256, 256, 30); 과 같은 식으로 해야할겁니다. 음 ... 거의 데이터베이스 조작하는 수준이죠. 이렇게 되면 데이터 사이즈가 수메가 바이트에 이르러도 해결할 수 있습니다. 또 운영체제에 영향을 받지 않고요... 그러나 프로그래머 입장에서 좀더 기술적이고 산뜻한 방식을 권하자면 XMS API를 쓰는 것입니다. himem.sys와 emm386.exe를 띄우고 DOS 인터럽트 67h를 쓰면 되는데 .. 생각보다 쉬워요. -----------------------------------------------------------------o00o---- 모짜르트의 아름다움과 쇼팽의 경쾌함, 때론 베토벤의 장중함을 앤소니 벤츄라와 같은 그룹이 연주한 느낌으로 모니터의 오선지에 담아 감상하면서 나도 플룻의 선율로 참여할 수 있는 때가 오기를 .. |