0

나는 과 관련된 프로젝트에서 큰 물체 in 실제 메모리는입니다. 정말 큰 데이터 구조를 만들고 싶었지만 몇 가지 문제점을 발견했습니다. 방대한 양의 데이터를 할당하려고 시도하는 동안 과 같은 큰 개체를 만들 수 있습니다 (운영 체제 아키텍처에 따라 다름). 스레드의 개인 힙 또는 다른 방법으로이 제한을 받는지 확실하지 않습니다.운영 체제에서 사용되지 않는 메모리 영역의 시작 주소를 확인하는 방법은 무엇입니까?

운영 체제가 데이터를 메모리에 저장하는 방법을 찾을 때 데이터가 특정 순서로 저장된다는 것을 알았습니다. 내가 큰 개체을 만들려면 그리고 여기에 내가 내부 메모리를 할당하는 하나 개의 매우 큰 힙 영역을 가져야한다, 몇 가지 질문 ...

온다? 그렇다면 데이터를 조각화해야합니다. 다른 방법으로, 의 빈 영역이starting addresses을 찾은 다음이 사용하지 않는 부분을 사용하여 데이터를 데이터 구조에 넣습니다.

이 아이디어를 실현하는 것이 가능하다면 어떻게 할 수 있습니까?

또 다른 질문은 그 목록이 그 종류의 최상의 옵션 일 것이라고 생각합니까 거대한 물체? 또는 데이터 구조을 사용하는 것이 더 좋을까요?

선택한 데이터 구조을 두 개의 데이터 영역으로 나눌 수 있지만 하나의 객체로 서 있다고 생각하십니까?

미리 감사드립니다. 내 질문에 대한 모든 대답이 도움이 될 수 있습니다.

+0

어셈블리 언어 및/또는 OS 커널 외부에서는 자신이 소유하지 않은 메모리가 어디인지 알 수있는 곳이 아닙니다. 대부분의 OS는 심지어 당신이 알기를 원하지 않을 때까지 약간의 길이로갑니다. 필요한만큼 할당하고 OS가이를 관리하는 방법을 결정하게하십시오. – cHao

답변

0

여기서 메모리 할당에 대해 오해가있는 것으로 보입니다.

(1) 대부분의 운영 체제는 메모리를 선형으로 할당하지 않습니다. 일반적으로 프로세스 주소 공간에 매핑 된 메모리의 불연속성이 있습니다.

(2) 엄청난 양의 메모리를 할당하려면 운영 체제에서 직접해야합니다. 힙을 통해서가 아닙니다.

+0

광고 1. "특정 주문"의 의미에서, 나는 OS가 각각의 것을 메모리 공간에 둘 곳을 결정한다는 것을 의미했다. 나는 선형이 아니라는 것을 안다. 광고 2. OS를 통해 직접 수행되는 일종의 메모리 할당을 알고 있습니까? ** HeapAlloc ** 또는 ** VirtualAlloc **과 같은 일부 기능을 알고 있지만 어떻게 관리 할 수 ​​있는지 궁금합니다. –

+0

@ JarosławAbram : 실제 메모리에서 선형인지 여부는 신경 쓸 필요가 없습니다. 한꺼번에 메모리를 할당하면 가상 메모리에서 선형이되고 커널 공간 외부에서는 유용한 차이점이 없습니다. – cHao