KR100349958B1 - 메모리 관리를 위한 방법 및 장치 - Google Patents

메모리 관리를 위한 방법 및 장치 Download PDF

Info

Publication number
KR100349958B1
KR100349958B1 KR1020000006159A KR20000006159A KR100349958B1 KR 100349958 B1 KR100349958 B1 KR 100349958B1 KR 1020000006159 A KR1020000006159 A KR 1020000006159A KR 20000006159 A KR20000006159 A KR 20000006159A KR 100349958 B1 KR100349958 B1 KR 100349958B1
Authority
KR
South Korea
Prior art keywords
memory
condition
size
data structures
data
Prior art date
Application number
KR1020000006159A
Other languages
English (en)
Other versions
KR20000076636A (ko
Inventor
스위니피터에프.
Original Assignee
인터내셔널 비지네스 머신즈 코포레이션
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 인터내셔널 비지네스 머신즈 코포레이션 filed Critical 인터내셔널 비지네스 머신즈 코포레이션
Publication of KR20000076636A publication Critical patent/KR20000076636A/ko
Application granted granted Critical
Publication of KR100349958B1 publication Critical patent/KR100349958B1/ko

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/0223User address space allocation, e.g. contiguous or non contiguous base addressing
    • G06F12/023Free address space management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5011Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
    • G06F9/5016Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals the resource being the memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5061Partitioning or combining of resources
    • G06F9/5077Logical partitioning of resources; Management or configuration of virtualized resources

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • Devices For Executing Special Programs (AREA)
  • Memory System (AREA)

Abstract

다수의 데이터 구조의 각각에 대응하는 정렬 조건를 측정하는 단계를 구비하여 메모리 유용성을 개선하는 방법이 개시된다. 데이터 메모리 내의 다수의 데이터 구조의 기억장소는 상기 정렬 조건을 기초로하여 배치된다.

Description

메모리 관리를 위한 방법 및 장치{METHOD AND APPARATUS FOR MEMORY MANAGEMENT}
본 발명은 메모리 관리에 관한 것이며, 보다 자세하게는 명시적 메모리 관리(explicit memory management)에 관한 것이다. 특히, 요구된 메모리의 특성을 기초로한 메모리 관리의 방법과 장치를 제공한다.
컴퓨터 프로그램은 일반적으로 결과를 산출하기 위하여 데이터를 조작하는 알고리즘이다. 데이터를 저장하기 위한 메모리 블록은 데이터를 조작하기 전에 먼저 할당되어야한다. 데이터가 더이상 필요하지 않게 될 때, 메모리 블록은 할당해제되거나 혹은 해체된다. 메모리 블록의 할당 및 할당해제는 일반적으로 메모리 관리로서 언급된다.
몇 개의 프로그래밍 언어(예를들면, C, 파스칼, 에이더, C++,...) 는 프로그래머가 메모리 관리를 명시적으로 제어할 수 있게 되어 있다. 이들 프로그래밍 언어 중 몇 개(예를들면, C, 파스칼, C++,...) 는, 컴파일 시에, 데이터 구조의 생존기간이 알려지지 않았을 때, 혹은 데이터 구조의 사이즈가 알려지지 않았을 때,혹은 데이터 구조를 할당한 프로그램 영역의 생존기간을 데이터 구조의 생존기간 전에 중단시킬 때에, 프로그래머에 의한 명시적 메모리 관리를 요구한다. 이들 메모리 할당체는 때때로 동적 기억장소 할당체로서 언급되는데, 그것은 동작중에 정보가 알려졌을 때에는, 메모리가 명시적으로 관리되어야 하기 때문이다.
일반적으로, 운영체제는 프로그래밍 언어에 메모리 관리 서비스를 제공한다. 자유저장 혹은 히프(heap) 로서 알려진 메모리의 사용되지 않은 저장영역으로부터 메모리 블록을 할당하기 위하여 메모리를 명시적으로 관리하는데 이 서비스를 사용할 수 있다.
히프 관리자는 이미 할당된 메모리 블록을 할당해제하기 위하여 임의의 순서로 요구가 흩어져 있는 임의의 사이즈의 메모리 블록을 할당한다. 일반적으로 각 할당된 메모리 블록은 다른 할당된 메모리 블록을 오버랩하지 않으며, 히프 관리자는 블록 내에 저장된 데이터값 혹은 데이터 형태와는 독립적으로 전체 블록의 기억장소만을 할당하거나 혹은 할당해제한다. 몇 개의 프로그래밍 언어(예를들면, C, 파스칼, 에이더, C++) 의 경우에는, 데이터의 사용중에, 메모리를 단축시키도록 데이터가 저장되어진 메모리 블록을 재할당할 수 없게 되어 있는데, 이것은 히프 관리자가 재할당할 때에 포인터를 발견할 수 없고, 메모리 블록에 포인터를 갱신할 수 없기 때문이다.
많은 컴퓨터 제조자들은 메모리 내의 정렬되지 않은 데이터 기억장소를 액세싱하기 위하여 성능의 패널티(penatly)를 갖게 된다. 저장된 데이터는, 데이터 형태가 메모리 내의 적절한 경계(boundary) 상에 있지 않다면 정렬되지 않는다.예를들면, 정렬 조건이 4 바이트의 워드일 때에는, 스타팅 주소가 4 로 나누어질 때에, 저장된 데이터가 "정렬" 된다. 정렬되지 않은 메모리를 액세싱하기 위한 성능 패널티는 부가적인 명령 사이클, 불충분한 캐시사용, 및/또는 버블의 실행 파이프라인으로의 유도를 포함할 수 있다.
도 1 은 데이터 구조 (102) 를 저장하기 위하여 히프 관리자에 의해서 할당된 메모리 블록 (100) 의 일 실시예를 나타내는 도면이다. 상기 데이터 구조 (102) 는 두개의 문자형(char) 데이터 유닛 (104, 108) 과 하나의 정수형(int) 데이터 유닛 (106) 을 포함한다. 각 문자형 데이터 유닛 (104, 108) 은 1 바이트의 기억장소를 요구하며, 각 정수형 데이터 유닛(106) 은 4 바이트 (1 워드) 의 기억장소를 요구한다. 데이터 유닛 (104, 106, 108) 은 문자형, 정수형, 문자형의 순서로 데이터 구조 (102) 내에서 정렬된다.
컴파일러는, 데이터 구조 (102) 가 정렬 경계 상에서 시작하고 끝나는 것을 보장함으로써 적절하게 정렬된 구조 (102) 를 제공할 수 있다. 데이터 구조 (102) 에 대응하는 정렬 조건은 그 데이터 유닛 (104, 106, 108) 중 가장 큰 사이즈의 데이터 유닛이 된다. 그러므로, 정수형 데이터 유닛 (106) 이 4 바이트의 크기를 가지며, 문자형 데이터 유닛 (104, 108) 보다 크기 때문에, 상기 데이터 구조 (102) 에 대응하는 정렬 조건은 4 바이트가 된다.
데이터 구조 (102) 내에 포함된 각 데이터 유닛 (104, 106, 108) 은 4 바이트의 데이터 구조 (102) 정렬 조건에 따라서 정렬된다. 그러므로, 문자형 데이터 유닛 (104) 에는 뒤이어 3 바이트의 패딩 (105) 이 형성되며, 다른 문자형데이터 유닛 (108) 도 3 바이트의 패딩 (109) 이 뒤이어 형성된다. 그러므로, 12 바이트 메모리는 단지 총 6 바이트만을 갖는 데이터 유닛을 저장하기 위하여 사용된다.
히프 관리자는 히프 관리자의 정렬 조건에 따라서 메모리 블록 (100) 을 할당한다. 모든 가능한 메모리 요구에 대한 메모리 액세스를 정렬하기 위하여, 히프 관리자의 정렬 조건은 모든 가능한 메모리 요구에 대한 가장 큰 데이터 유닛의 사이즈와 동일하게 된다. 도 1 에 도시된 실시예에서, 히프 관리자의 정렬 조건은 8 바이트 (2 워드) 가 된다.
메모리 블록 (100) 은 할당된 메모리의 사이즈를 지시하는 헤더 사이즈 (110) 와 헤더 패딩 (112) 을 구비하는 헤더 (111) 을 포함한다. 이 실시예에서, 헤더 사이즈 (110) 는 4 바이트이며, 헤더 패딩 (112) 은 4 바이트이다. 헤더 패딩 (112) 은 데이터 구조 (102) 가 정렬 경계 상에서 시작하기 위해서는 필수적이다. 메모리 블록 (100) 의 끝에서 4 바이트의 내부 단편화 (114) 는 블록 (100) 이 2 워드 정렬 경계 상에서 끝나게 한다.
내부 단편화와 헤더가 큰 것은, 충분한 메모리 사용을 방해할 수도 있는 사용되지 않는 데이터로 메모리를 오염시킬 수도 있다. 예를들면, 데이터 캐시와 패딩 메모리는 유한자원이다. 데이터 캐시 혹은 패딩 메모리 내에 저장된, 사용되지 않는 데이터는, 사용되는 데이터를 강제로 아웃 시킬 수도 있으며, 강제로 아웃된 데이터를 재액세스할 때에는 더 많은 비용을 발생시킨다.
메모리 사용을 개선하기 위한 방법으로서, 다수의 데이터 구조의 각각에 대응하는 정렬 조건을 측정하는 단계를 구비한다. 데이터 메모리 내의 다수의 데이터 구조의 기억장소는 정렬 조건을 기초로하여 정렬된다.
상기된 설명과 다음의 상세한 설명 양자는 실시예로서, 그것이 본발명을 한정하지는 않는다.
본 발명은 첨부된 도면을 참조하여 읽을 때 다음의 상세한 설명으로부터 보 다 잘 이해될 수 있다. 일반적인 실시에 따르면, 도면의 다양한 특성은 수치화 되지 않았다. 그러나, 상기 다양한 특성의 크기는 임의로 연장되거나 혹은 축소된다.
도 1 은 데이터 구조의 기억장소에 대응하는 메모리 블록을 나타내는 도면이다.
도 2 는 본 발명의 실시예에 따르는 컴퓨터 시스템을 나타내는 도면이다.
도 3 은 본 발명에 따르는 실시예의 방법을 나타내는 플로우차트이다.
도 4 는 본 발명의 실시예에 따르는 컴파일러를 나타내는 플로우 차트이다.
도 5 는 본 발명에 따르는 또다른 실시의 방법을 나타내는 플로우 차트이다.
도 6 내지 도 13 은 본 발명에 따르는 메모리 관리를 수행하기 위한 실시 알고리즘을 나타내는 도면이다.
도 14 는 메모리 관리의 종래의 방법에 따르는 두 데이터 구조를 저장하기 위한 메모리 블록을 도시하는 도면이다.
도 15 는 메모리 요구의 사이즈가 알려졌을 때 본 발명에 따르는 두 데이터 구조를 저장하기 위한 메모리의 블록을 나타내는 도면이다.
도 16 은 메모리 요구의 사이즈가 알려지지 않았을 때 본 발명에 따르는 두 데이터 구조를 저장하기 위한 메모리의 블록을 나타내는 도면이다.
도 17 은 메모리 관리의 종래의 방법에 따르는 3 개의 데이터 구조를 저장하기 위한 메모리 블록을 나타내는 도면이다.
도 18 은 메모리 요구의 사이즈가 알려졌을 때 본 발명에 따르는 3 개의 데이터 구조를 저장하기 위한 메모리 블록을 나타내는 도면이다.
도 19 는 메모리 요구의 사이즈가 알려지지 않았을 때, 본 발명에 따르는 3 개의 데이터 구조를 저장하기 위한 메모리 블록을 나타내는 도면이다.
도면에 있어서, 동일한 도면부호는 전체에 있어서 동일한 구성요소를 가르키며, 도 2 는 본 발명에 따르는 메모리 관리를 구현하기 위한 컴퓨터 시스템 (200) 을 나타낸다. 컴퓨터 시스템 (200) 은 컴퓨터 플렛폼 (204) 을 포함한다. 하나 이상의 응용 프로그램 (202) 과 운영체제 (208) 는 컴퓨터 플렛폼 (204) 상에서 운영된다. 컴퓨터 플렛폼 (204) 은 하드웨어 유닛 (212) 을 포함한다. 상기 하드웨어 유닛 (212) 은 하나 이상의 중앙처리장치(CPU,216), 랜덤액세스메모리 (램 (RAM),214) 및 입출력 인터페이스 (I/O, 218) 를 구비한다. 터미널 (226), 데이터 기억 장치 (230) 및 프린터와 같은 주변장치는 컴퓨터 플랫폼 (204) 에 접속될 수도 있다. 본 발명에 따르는 운영체제 (208) 는 응용프로그램 (202) 에 서비스를 제공하여서, 이 서비스를 통하여, 응용프로그램 (202) 은 히프에 메모리 를 명시적으로 할당 및 할당해제 할 수도 있다.
도 3 은 본 발명에 따르는 실시의 메모리 관리 방법을 나타내는 플로우 차트 (300) 이다. 이 실시예는 제 1 단계 (302), 제 2 단계 (304) 및 제 3 단계 (306) 을 포함한다. 제 1 단계 (302) 에서, 프로그램 리프리젠테이션을 수신하고, 프로그램분석을 프로그램 리프리젠테이션 상에서 수행한다. 상기 프로그램 분석은, 데이터 구조를 할당시킨 프로그램 히프의 사이즈와 정렬 조건을 결정하는 것을 포함하는, 히프 메모리의 프로그램 사용을 결정한다. 제 2 단계 (304) 는 제 1 단계로부터 수신된 히프 메모리 사용 정보를 사용하여 커스텀 히프 관리자를 생성한다. 제 3 단계 (306) 에서는 프로그램 리프리젠테이션이 커스텀 히프 관리자를 사용하도록 갱신되며, 갱신된 프로그램 리프리젠테이션을 제공한다.
실시예에서, 본 발명에 따르는 메모리 관리의 방법은 컴파일러에 의해서 수행된다. 도 4 는 컴파일러 (400) 의 실시구조를 설명한다. 컴파일러 (400) 는 프로그램 소스 코드를 수신하고 구문설명계 (402) 는 소스 코드의 내부 리프리젠테이션을 생성한다. 분석기 (404) 는 소스 코드의 내부 리프리젠테이션을 수신하며, 언어 시멘틱스에 어긋나지 않는지를 확인한다. 코드 생성기 (406) 는 내부 리프리젠테이션으로부터 기계어 코드를 생성한다. 실시예에서, 본 발명의 단계 1 (도 3 에서의 단계 302) 은 컴파일러의 분석기 (404) 에 의해서 수행되고, 단계 2 (도 3 에서의 단계 304) 와 단계 3 (도 3 에서의 단계 306) 은 컴파일러의 코드 생성기 (406) 에 의해서 수행된다.
도 5 는 본 발명에 따르는 메모리 관리의 또다른 실시의 방법을 나타내는 플로우 차트 (500) 이다. 단계 502 에서, 프로그램 리프리젠테이션은 원시 히프 관리자에 대한 호출을 인식하기 위하여 분석된다. 단계 506 에서, 그 데이터 구조의 정렬 조건이 인식된다. 단계 508 에서, 원시 히프 관리자에 대한 호출에 대응하는 메모리 요구의 사이즈가 알려졌는지 혹은 아닌지를 판정한다. 만일, 프로그램 분석이 프로그램 실행이전에 컴파일러에 의해서 수행된다면, 메모리 요구의 사이즈는 알려지지 않을 수도 있다.
단계 510 에서, 요구된 메모리의 사이즈가 알려지지 않은 경우의 메모리 요구는 개별 그룹으로 정렬된다. 각각의 개별그룹은 동일한 정렬 조건을 갖는 유사한 데이터 구조를 갖는 메모리 요구를 포함한다. 단계 512 에서, 커스텀 히프 관리자는, 고유의 정렬 조건에 따르는 각각의 개별 그룹에 대하여 생성된다.
만일 메모리 요구의 사이즈가 단계 508 에서 알려진 것으로 판정된다면, 단계 514 에서는, 그 메모리 요구의 사이즈가 결정된다. 단계 516 에서, 원시 히프 관리자에 대한 호출은, 그들 대응하는 메모리 요구의 사이즈에 따라서 개별 그룹으로 정렬된다. 각각의 개별 그룹은 동일한 사이즈의 메모리에 대한 요구를 포함한다.
단계 518 에서, 이들 개별 그룹의 각각에 대한 정렬 조건이 결정된다. 비록 각각의 개별 그룹 내의 메모리 요구가 동일한 사이즈의 메모리 블록에 대한 많은 메모리 요구에 대응될 수 있을지라도, 개별 그룹 중 하나 내의 각각의 메모리 요구는 다른 정렬 조건과 함께 유사한 데이터 구조를 가질 수도 있다. 이 실시예에서, 그룹에 대한 정렬 조건은, 그 그룹에 대응하는 데이터 구조에 대한 데이터구조 정렬 조건 중 가장 큰 정렬 조건이 된다. 단계 520 에서, 그 그룹의 정렬 조건과 메모리 요구의 고유의 사이즈에 따라서 각각의 개별 그룹에 대응하는 커스텀 히프 관리자를 생성한다.
단계 522 에서, 각각의 커스텀 히프 관리자에 대하여 기억장소의 개별 풀(pool) 이 할당될 수도 있다. 단계 524 에서, 프로그램 리프리젠테이션 내의 원시 히프 관리자에 대한 호출은 커스텀 히프 관리자에 대한 호출로 대체되며, 갱신된 프로그램 리프리젠테이션이 제공된다.
도 6 은 도 5 의 플로우 차트 내에서 설명된 메모리 관리의 실시의 방법에 대한 실시 알고리즘을 나타낸다. 단계 1 (라인 1 -7) 에서 프로그램 리프리젠테이션은 정렬 조건과 각 히프 할당 데이터 구조의 사이즈를 판정하도록 분석된다. 상기 정보는 데이터 구조의 형태 t, 데이터 구조의 정렬 조건 (alignmentOf(t)), 요구된 메모리 사이즈(sizeOf(s)) 를 포함하는 트리플 R 세트 내에 저장된다.
데이터 구조의 정렬 조건 (alignmentOf(t)) 은 데이터 구조 내에 포함된 것 중 가장 큰 데이터 형태의 사이즈이다. 정렬 조건은, 프로그램 리프리젠테이션의 실행 전에 컴파일러에 의해서 컴파일 중에 얻어질 수도 있다. 히프 관리자에 대한 호출에 대응하는 메모리 요구의 사이즈가 컴파일 시에 알져지지 않을 수도 있기 때문에, 메모리 요구의 사이즈 (sizeOf(s)) 는 알려지지 않을 수도 있다.
단계 2 (라인 8-9) 에 대하여, 루틴 GenerateCustomizedRoutines 은 커스텀 히프 관리자를 생성시키기 위해 호출된다. 도 7 에 도시된, 이 루틴은 트리플 세트 R 를 수신하고 트리플의 출력 세트 S 를 생성한다. 만일 메모리 요구의사이즈가 컴파일시에 알려져 있다면, 데이터 구조를 할당 및 할당해제하기 위하여, 각각의 출력 트리플 S 는, t 형태의 데이터 구조와 커스텀 메모리 관리 루틴 쌍을 포함한다.
각각 다른 사이즈의 메모리 요구에 대하여, malloc 과 free 의 개별 루틴쌍이 생성된다. 이 실시예에서, 각각의 루틴쌍은, 메모리를 할당 및 할당해제하는 기억장소의 풀을 공유한다. 특정한 루틴쌍에 의해서 할당 및 할당해제된 모든 메모리 블록이 동일한 사이즈가 되기 때문에 헤더 정보는 요구되지 않는다. 루틴쌍이 다른 정렬 조건을 갖는 다른 데이터 구조 형태에 대응될 때, 대응하는 데이터 구조형태의 가장 큰 정렬 조건이 그 루틴쌍을 위하여 선택된다.
도 6 에 대하여, 알고리즘 단계 (라인 10-22) 는 커스텀 히프 관리자를 사용하도록 프로그램 리프리젠테이션을 갱신한다. 메모리 요구 사이즈가 컴파일(라인 12-19) 시에 알려지지 않았다면, 기억장소의 풀은 사이즈에 의한 것 이외에 이 정렬 조건에 따라서 구획된다(라인 16-18;또한 도 5 의 단계 510 및 512 참조). 이것은, 비록 궁극적인 그들 사이즈가 다를 수 있다고 하더라도, 동일한 기억장소의 풀로부터 할당된 컴파일시의 알려지지 않은 사이즈와 동일한 정렬 조건을 갖는 메모리 요구를 발생시킨다. 컴파일시에 알려진 사이즈의 메모리 요구에 반하여, 정렬 조건에 따라서 할당된 컴파일시의 알려지지 않은 사이즈의 메모리 요구는 헤더를 요구하는데, 이것은 그들 사이즈가 다르기 때문이다.
메모리 요구의 사이즈가 컴파일 시에 알려질 때, 갱신 프로그램 루틴은 프로그램 리프리젠테이션을 갱신하도록 호출되어서(라인 22), 단계 2 에서 생성된 커스텀 메모리 관리 루틴을 사용하도록 한다. 도 5 의 단계 524 에 대하여 기술된 바와 같이, 갱신 프로그램 루틴은 입력으로써, 데이터 구조의 형태와, 원시 프로그램 리프리젠테이션과 함께 대응하는 히프 관리자 루틴 쌍을 수신하고, 갱신된 프로그램 리프리젠테이션의 출력을 제공한다.
도 8 은 절차 프로그래밍 언어에 대한 갱신 프로그램 알고리즘을 나타낸다. 프로그램 리프리젠테이션에서의 스테이트먼트가 조사되어서(라인 1-3), 메모리 요구의 사이즈가 컴파일시 알려진 t 형태의 데이터 구조를 할당하는 히프 관리자에 대한 호출을 인식한다. 이들 원시 히프 관리자는 대응하는 커스텀 히프 관리자로 대체된다(라인 7-11). 도 9 는 오브젝트 지향 프로그램 언어에 대한 갱신 프로그램 루틴을 설명한다. 각 구성요소에 대하여, S (라인 1) 내의 <t,malloc_1_a, free_1_a>, 메서드(method) new 와 delete 는 t 의 클래스 (라인 2-3) 에 부가되어서, new 는 malloc_1_a 을 호출하고 delete 는 free_1_a 를 호출한다. new(혹은 delete) 가 t 에 대하여 호출될 때, t 의 new (혹은 delete) 메서드가 호출된다.
절차언어에서 구현된 바와 같이, 본 발명에 따르는 메모리 관리의 예가, 메모리를 명시적으로 관리하는 도 10 내의 C 프로그램(원시 프로그램 리프리젠테이션) 과, 도 11 에 도시된 대응하는 갱신된 C 프로그램 (갱신된 프로그램 리프리젠테이션) 에 대하여 설명되어져 있다. 이 프로그램은 3 개의 데이터 구조를 갖는데, T1, T2 및 T3 가 그것이다. T1 및 T2 는 24 바이트의 기억장소를 요구하며 T3 는 16 바이트의 기억장소를 요구한다. T1 은 2 개의 워드(8 바이트) 정렬 조건을 가지며, T2 및 T3 는 모두 하나의 워드(4 바이트) 정렬 조건을 갖는다.
주 루틴은 히프에 모두 3 개의 데이터구조를 할당 (S2-S5) 및 할당해제한다(S6-S9). 예를들면, 스테이트면트 S2 는 히프에 T1 데이터 구조 를 포함하는 메모리 블록을 할당하고, T1 데이터 구조에 대한 포인터인 변수 T1_ptr 내에 메모리 어드레스의 블록을 배치한다. T1*은 히프 관리자에 의해서 리턴된 메모리에 대한 포인터로 T1 데이터 구조로 만드는 것을 의미한다. 메모리 요구 사이즈가 알려진 스테이트먼트 S2 와는 반대로, 스테이트먼트 S4 는, 어레이 내의 구성요소 수가 컴파일시에 알려지지 않은 경우, 히프에 T2 데이터 구조의 어레이를 할당한다.
단계 1 은 스테이트먼트 S2-S5 내에 히프 할당체에 대한 호출에 대응하는 트리플 R 세트 <T1, 8,24>, <T2,4,24>, <T2,4,알려지지 않음>, 및 <T3, 4,16> 을 생성한다. 단계 2 는 S 세트의 <T1, malloc_8_24, free_8_24>, <T2,malloc_8_24>, 및 <T3, Malloc,_4_16, free_4_16> 를 생성시킨다. 트리플 S 의 각각의 제 2 및 제 3 성분은 루틴을 제어하여 히프로부터 메모리를 각각 할당 및 할당해제한다. 예를들면, malloc_8_24 는 정렬된 2 워드(8 바이트) 인 24 바이트의 메모리를 할당한다. 비록 T2 의 정렬 조건이 4 바이트라고할지라도, 대응하는 커스텀 히프 관리자의 정렬 조건은 8 바이트인데, 이것은 T1 및 T2 데이터 구조가 모두 동일한 사이즈를 가지며, 그들 정렬 조건 중 가장 큰 것이 상기 양자를 위하여 사용되기 때문이다.
도 11 은 커스텀 히프 관리자 루틴을 사용하기 위하여 단계 3 에서 갱신된원시 프로그램 리프리젠테이션에 대응하는 갱신 프로그램 리프젠테이션을 도시하고 있다. 스테이트먼트 S2, S3 및 S5 에서 도시되어 있는 바와 같이, 메모리 요구의 사이즈는 컴파일 시간에 알려질 때, 프로그램은 대응하는 커스텀 히프 관리자 루틴을 가지고 갱신된다. 도 11 에서 스테이트먼트 S4 에 의해서 설명된 바와 같이, 메모리 요구의 사이즈가 컴파일시 알려질 때, 히프의 대응하는 메모리의 블럭은, 정렬 조건에 대응하는 커스텀 히프 관리자에 의해서 할당된다.
이 실시예에서, 기억장소의 3 개의 개별 풀은 커스텀 히프 관리자 루틴에 의해서 사용될 수도 있다. 제 1 풀은, 정렬된 2 워드인 24 바이트 사이즈를 갖는 메모리 요구에 대하여 사용될 수도 있다. 제 2 풀은 워드 정렬 조건을 갖는 16 바이트의 기억장소에 대하여 메모리 요구로 사용될 수도 있다. 제 3 풀은, 메모리 요구의 사이즈에 관계하지 않고, 워드 정렬 조건을 갖는 데이터 구조를 저장하기 위하여 사용될 수도 있다.
도 12 는 메모리를 명시적으로 관리하는 C++(원시 프로그램 리프리젠테이션) 로 쓰여진 오브젝트 지향 응용을 도시하고 있다. 도 13 은 대응하는 갱신된 프로그램 리프리젠데이션을 도시한다. 도 12 에서 프로그램 리프리젠테이션은 도 10 의 프로그램과 같이, 동일한 3 개의 데이터 구조 T1, T2, 및 T3 을 포함한다. 도 12 내의 프로그램에 적용된 단계 1 및 단계 2 는 도 9 내에 설명된 프로그램에 대하여 생성된 동일한 세트의 트리플 R 및 S 를 생성한다.
메모리 요구의 사이즈가 컴파일시에 알려지지 않았을 때, 단계 3 은 컴파일시에 알려지지 않은 사이즈를 갖는 T2 데이터 구조의 어레이를 할당할 때,malloc_4 및 Free_4 에 대한 동일한 호출을 생성한다. 그러나, 메모리 요구의 사이즈가 컴파일시 알려질 때, 호출된 갱신프로그램 루틴은 도 10 및 도 11 내의 프로그램에 대하여 것과는 상이한다. 도 9 에 도시된 바와 같이, 호출된 갱신프로그램은 히프 할당된 데이터 구조의 클래스 선언을 갱신하여서 new 방법 new 및 delete 를 부가한다.
도 13 에 도시된 바와 같이, 갱신될 때, T1 과 T2 의 new 및 delete 는 각각 malloc_8_24 및 free_8_24 를 호출한다. T2 의 new [] 와 delete [] 는 malloc_4_16 와 free_4_16 을 각각 호출한다. T3 의 new 와 delete 는 malloc_4_16 과 free_4_16 을 각각 호출한다. 도 13 에 도시된 갱신된 프로그램 리프리젠테이션에서, 스테이트먼트 s2, s3 및 s5 (s6, s7 및 s8) 에서 new(delete) 에 대한 호출은 T1-T3 의 클래스 정의에서 정의된 new(delete) 의 정의를 호출한다. 예를들면, 스테이트먼트 S2 에서 new 에 대한 호출은 클래스 T1 에서 정의되고 malloc_8_24 를 호출하는 커스텀 new 루틴을 호출한다. 클래스가 new (혹은 delete) 메서드를 오버라이드하지 않을 때, 디폴트 히프 관리자 루틴은 malloc (혹은 free) 을 바로 호출되도록 사용된다.
본 발명에 따르는 메모리 관리 방법을 사용함으로써 제공된 개선된 메모리 사용의 장점은 도 14 내지 도 19 에서 설명되고 있다. 도 14 내지 19 에서의 각각의 로우(row) 는 4 바이트 메모리를 나타낸다. 도 14-16 은 두 데이터 구조 (102) 의 기억장소에 대응하는 메모리 블록을 나타낸다. 도 17-19 는 3 개의 데이터 구조 (102) 의 기억장소에 대응하는 메모리 블록을 나타낸다.
도 14 는 종래의 메모리 관리 기술에 따르는 두 데이터 구조 (102) 의 어레이를 저장하도록 할당된 메모리 블록 (1400) 을 도시한다. 도 1 에 대하여 설명한 것과 동일하게, 다른 사이즈 블록이 동일한 기억장소 풀 내에 저장되기 때문에 헤더는 메모리블록의 사이즈를 지시하기 위하여 사용되며, 헤더 패딩은 2 워드 정렬 조건 때문에 요구된다. 종래의 메모리 관리 기술에서, 메모리는 32 배수의 사이즈를 갖는 소정의 블록 사이즈 내에서 할당된다. 요구된 메모리 사이즈는, 32 배수가 되도록 하는 32 바이트이며, 이것은 내부 단편화를 발생시키지 않는다.
도 15 및 도 16 은 메모리 요구의 사이즈가 알려질 때 및 알려지지 않을 때의 본 발명에 따르는 두 개의 데이터 구조 (102) 의 어레이를 저장하기 위한 메모리 블록 (1500, 1600) 을 각각 설명한다. 사이즈가 알려질 때, 같은 풀 내의 모든 블록메모리는 동일한 사이즈가 되기 때문에, 블록 1500 은 헤더가 필요하지 않다. 블록이 정확한 정렬 상에서 끝나기 때문에, 메모리 블록 1500 은 임의의 내부 단편화를 가지지 않는다. 블록의 사이즈가 컴파일시에 알려지지 않았기 때문에, 메모리 블록 1600 은 4 바이트의 헤더를 포함한다. 메모리 블록 1600 은 임의의 내부 단편화를 포함하지 않는데, 이것은 4 바이트인 정렬 조건에 따라서 풀 내에 저장되기 때문이다. 도 17 은 종래의 메모리 관리 기술에 따르는 3 개의 데이터 구조 (102) 의 어레이를 저장하기 위하여 할당된 메모리 블록 (1700) 을 나타낸다. 블록 1400 과 비교하면, 데이터 구조 102 가 부가된 것과 함께, 블록 1700 은, 블록이 32 배수의 사이즈로 할당되기 때문에 20 바이트의 내부 단편화를 포함한다. 도 18 및 19 는 메모리 요구 사이즈가 알려질 때와, 알려지지 않을 때의 본 발명에 따르는 3 개의 데이터 구조 (102) 의 어레이를 저장하기 위한 메모리 블록 (1800, 1900) 을 각각 설명하고 있다. 메모리 블록 1800 은, 블록 1500 에 대하여 설명된 동일한 이유로, 헤더를 요구하지 않으며, 내부 단편화를 가지지 않는다. 메모리 블록 1900 은 4 바이트의 헤더를 가지며, 블록 1600 에서 설명된 동일한 이유로 내부 단편화를 가지지 않는다. 본 발명에 의한 메모리 사용의 개선은 다음의 표 1 에 도시되어 있다.
본 발명의 실시예에서, 메모리 관리를 위한 방법이, 실행 전에 구현될 수도 있도록 제공된다. 오프라인 프로파일링과 비교하면, 본 발명의 실시예에서는 실행 통계를 모으기 위하여 설치된 소스 코드를 요구하지 않는다는데에서 장점을 찾을 수 있다. 또한, 오프 라인 프로파일링을 기초로한 메모리 관리는, 본 발명의 실시예와 같은 예측성을 제공할 수가 없는데, 이것은 프로그램 실행이 다양하며, 예측불가능할 수가 있고, 실제 프로그램 실행이 프로파일된 실행과 상이할 수도 있기 때문이다.
본 발명의 실시예에서, 메모리 관리의 방법은 예측하거나 혹은 최악의 경우의 정렬 조건이 아닌 실제 정렬 조건을 고려한다. 이것은 정렬 조건을 가정하는 방법과 비교하여, 감소된 내부 단편화를 생성시킨다.
본 발명은 소스 코드 프로그램 리프리젠테이션에 적용하는 것으로서 상기에서 설명된다. 당업자에게는 공지된 바와 같이, 본 발명은 소스 코드 프로그램 리프리젠테이션에 한정되지 않으며, 컴파일 코드, 실행 코드 및 다수의 언어를 위한 중간 코트등의 다른 프로그램 리프리젠테이션에 적용할 수도 있는데, 이것 역시 이것만으로 한정되지는 않는다.
프로파일링 통계를 기초로한 메모리 관리와는 대조적으로, 본 발명의 실시예에 따르는 프로그램 분석은 신뢰성을 제공하며 다양한 프로그램 입력에 대한 조화로운 메모리 관리를 제공한다. 본 발명에 따르는 실시 방법은 스테이트먼트의 실행의 빈도수에 대한 정보를 사용하기 위하여 적용할 수도 있다. 예를들면, 기술은, 어느 데이터 구조가, 적절한 풀 사이즈 혹은 정렬을 판정하기 위하여 비중있게 사용되었는지를 추정하기 위하여 사용될 수도 있다. 선택적으로, 프로파일링이 프로그램 분석과 결합될 수도 있어서 어느 풀 사이즈가 가장 많이 요구되었는지를 판정한다. 빈도수에 대한 정보는 풀 혹은 결합 풀에 대하여 재할당하는데 사용될 수도 있다.
데이터의 큰 블록과 작은 블록의 양자에 대하여 원시 히프 관리자가 히프 기억장소의 큰 블록을 할당할 때, 단편화와 헤더에 대한 스페이스 오버헤드는, 큰 데이터 블록과 비교하여 작은 데이터 블록에 대한 것이 비례적으로 높게 될 수도 있다. 기억장소의 큰 블록에 대한 헤더 오버헤드와 단편화의 감소는 전체 스페이스 감소에 보다 작은 영향을 미칠 수도 있다. 본 발명의 실시예에서, 본 발명에 따르는 메모리 관리의 방법은, 소정의 사이즈보다 작은 기억장소의 블록을 할당 및 할당해제하기 위한 커스텀 히프 관리자를 제공하기 위하여 사용된다. 또다른 실시예에서, 커스텀 히프 관리자는, 히프 할당에 의해서 사용되지 않은 스페이스가 임계 퍼센트만큼, 요구된 사이즈 이상으로 할당된 블록 사이즈를 증가시킬 때, 기억장소의 블록을 할당 및 할당해제한다. 이 임계 퍼센트는 10% 와 20% 사이의 범위에 있다.
적응성 혹은 다이나믹성 컴파일러라고 불리는, 실시간 최적 컴파일러는, 미래의 실행을 위하여 그 일부분을 적응시켜 재컴파일하도록 프로그램 리프리젠테이션의 일부분의 현 실행의 가동을 사용한다. 당업자에게 공지된 바와 같이, 본 발명에 따르는 메모리 관리의 방법은 실시간 최적 컴파일러와 함께 사용될 수 있다.
당업자에 이미 공지된 바와 같이, 본 발명의 실시예는, 특정 프로그램 프리젠테이션에 따르는 데이터 구조에 대한 정렬 조건, 다른 형태 및 사이즈에 적응할 수도 있다. 예를들면, 프로그램 리프리젠테이션은 다른 사이즈의 메모리에 대한 메모리 요구에 적절하게 알려진 특정 사이즈의 메모리에 대한 더 작은 메모리요구를 포함할 수도 있다. 비록 이들 사이즈가 컴파일시에 공지된 것일지라도, 본 발명의 실시예에서, 그들 사이즈를 기초로한 것 이외에 그들 정렬 요구에 따라서 할당 및 할당해제될 수도 있다.
여기서는 임의의 특정 실시예에 관하여 설명되었지만, 본 발명은 도시된 설명으로 한정되지 않는다. 또한 본 발명의 정신을 벗어나지 않고 청구항의 정신과 영역 내에서라면 다양한 변형이 구현될 수도 있다.

Claims (24)

  1. 메모리 사용의 증가 방법에 있어서,
    (a) 다수의 데이터 구조의 각각에 대응하는 정렬 조건을 측정하는 단계;
    (b) 상기 정렬 조건을 기초로하여 데이터 메모리 내에 상기 다수의 데이터 구조의 기억장소를 정렬하는 단계; 및
    (c) 상기 정렬하는 단계에서 정렬된 데이터 구조의 전체 사이즈를 측정하는 단계 및 상기 정렬된 데이터 구조의 전체 사이즈가 동일한 데이터 구조들로 기억 장소를 그룹화하는 단계를 포함하는 메모리 사용의 증가 방법.
  2. 삭제
  3. 제 1 항에 있어서, 프로그램 메모리로부터 프로그램 리프리젠테이션을 판독하는 단계를 더 포함하며, 상기 프로그램 리프리젠테이션은 상기 다수의 데이터 구조 중 하나에 대응하는 원시 히프 관리자에 대한 호출을 포함하며, 상기 원시 히프 관리자는 상기 다수의 데이터 구조 중 상기 하나에 대응하는 상기 데이터 메모리의 제 1 부분을 할당 및 할당해제하도록 적응되는 메모리 사용의 증가 방법.
  4. 제 3 항에 있어서, 단계 (b) 는
    (b1) 상기 원시 히프 관리자에 대응하는 커스텀 히프 관리자를 생성하는 단계; 및
    (b2) 상기 원시 히프 관리자에 대한 상기 호출을 상기 커스텀 히프 관리자에 대한 호출로 대체하는 단계를 선택적으로 포함하며,
    상기 커스텀 히프 관리자는 상기 다수의 데이터 구조 중 상기 하나의 상기 사이즈 조건과 상기 정렬 조건 중 적어도 하나에 따라서 상기 데이터 메모리의 제 2 부분을 할당 및 할당해제 하는데 접합한 메모리 사용의 증가 방법.
  5. 제 4 항에 있어서, 상기 다수의 데이터 구조의 상기 하나의 상기 사이즈 조건이 알려지지 않았을 때, 상기 원시 히프 관리자에 대한 상기 호출이, 상기 다수의 데이터 구조 중 상기 하나의 상기 정렬 조건에 따라서 상기 데이터 메모리의 상기 제 2 부분을 할당 및 할당해제하도록 적응되는 상기 커스텀 히프 관리자에 대한 호출로 대체되는 메모리 사용의 증가 방법.
  6. 제 4 항에 있어서, 상기 다수의 데이터 구조의 상기 하나에 대한 상기 사이즈 조건이 알려졌을 때, 상기 원시 히프 관리자에 대한 상기 호출이, 상기 다수의 데이터 구조 중 상기 하나의 상기 사이즈 조건에 따라서 상기 데이터 메모리의 상기 제 2 부분을 할당 및 할당해제하도록 적응되는 상기 커스텀 히프 관리자에 대한 호출로 대체되는 메모리 사용의 증가 방법.
  7. 제 6 항에 있어서, 상기 다수의 데이터 구조의 상기 선택된 데이터 구조는상기 다수의 데이터 구조중 상기 하나의 상기 사이즈의 조건과 동일한 사이즈 조건을 가지며, 상기 커스텀 히프 관리자는 상기 선택된 데이터 구조의 상기 정렬 조건 중 가장 큰 정렬 조건과 동일한 정렬 조건에 따라서 상기 데이터 메모리의 상기 제 2 부분을 할당 및 할당해제하도록 적응되는 메모리 사용의 증가 방법.
  8. 제 1 항에 있어서, 상기 데이터 구조는 프로그램 리프리젠테이션 내에 포함되며, 단계 (a) 와 (b) 는 상기 프로그램 리프리젠테이션을 실행하기 전에 수행되는 메모리 사용의 증가 방법.
  9. 제 1 항에 있어서, 상기 다수의 데이터 구조중 각각 하나에 대응하는 상기 정렬 조건은, 상기 다수의 데이터 구조 중 각각 하나 내에 포함된 가장 큰 데이터 유닛의 사이즈인 메모리 사용의 증가 방법.
  10. 메모리 사용의 증가 방법에 있어서,
    a) 프로그램 리프리젠테이션을 수신하는 단계;
    b) 상기 프로그램 리프리젠테이션의 실행 전에 상기 프로그램 리프리젠테이션의 메모리 사용 조건을 결정하는 단계; 및
    c) 상기 프로그램 리프리젠테이션을, 상기 메모리 사용 조건을 기초로하여 메모리를 할당하도록 변경하는 단계를 포함하는 메모리 사용의 증가 방법.
  11. 제 10 항에 있어서, 단계 (c) 는 상기 프로그램 리프리젠테이션을 각각의 고유의 메모리 사용 조건에 대응하는 상기 메모리의 개별 풀을 할당하도록 적응되는 단계를 포함하는 메모리 사용의 증가 방법.
  12. 제 11 항에 있어서, 상기 메모리 사용 조건은 사이즈 조건을 포함하며, 상기 메모리의 개별 풀은 각각의 고유의 사이즈 조건에 대응하는 메모리 사용의 증가 방법.
  13. 제 11 항에 있어서, 상기 메모리 사용 조건은 정렬 조건을 포함하며, 상기 메모리의 개별 풀은 각각의 고유의 정렬 조건에 대응하는 메모리 사용의 증가 방법.
  14. 제 10 항에 있어서, 상기 프로그램 리프리젠테이션은 다수의 메모리 요구를 포함하며, 단계 b) 는 상기 다수의 메모리 요구의 각각에 대한 각각의 사이즈 조건을 결정하는 단계를 포함하며, 단계 c) 는 상기 각각의 사이즈 조건을 기초로하여 상기 다수의 메모리 조건의 각각에 대응하는 메모리를 할당하도록 상기 프로그램 리프리젠테이션을 변경하는 단계를 포함하는 메모리 사용의 증가 방법.
  15. 메모리 사용의 증가 장치에 있어서,
    다수의 데이터 구조의 각각에 대응하는 정렬 조건을 측정하기 위한 측정수단,
    상기 정렬 조건을 기초로하여 데이터 메모리 내에 상기 다수의 데이터 구조의 기억장소를 정렬하기 위한 정렬 수단, 및
    상기 정렬 수단에 의하여 정렬된 데이터 구조의 전체 사이즈를 측정하는 수단 및 상기 정렬된 데이터 구조의 전체 사이즈가 동일한 데이터 구조들로 기억 장소를 그룹화하는 수단을 포함하는 메모리 사용의 증가 장치.
  16. 메모리 사용의 증가 장치에 있어서,
    프로그램 리프리젠테이션을 수신하기 위한 수단과,
    상기 프로그램 리프리젠테이션의 실행 전에 상기 프로그램 리프리젠테이션의 메모리 사용 조건을 결정하기 위한 수단과,
    상기 메모리 사용 조건을 기초로하여 메모리를 할당하도록 상기 프로그램 리프리젠테이션을 변경하기 위한 변경 수단을 포함하는 메모리 사용의 증가 장치.
  17. 제 16 항에 있어서, 상기 메모리 사용 조건은 사이즈 조건을 포함하며, 상기 변경 수단은 각각의 고유의 사이즈 조건에 대응하는 상기 메모리 개별 풀을 할당하도록 적응시키는 수단을 포함하는 메모리 사용의 증가 장치.
  18. 메모리 사용을 증가시키기 위하여 그 안에 삽입된 컴퓨터 판독가능 프로그램 코드 수단을 갖는 컴퓨터 사용가능 매체를 포함하는 제조물로서,
    상기 제조물 내의 컴퓨터 판독가능 프로그램 코드수단은
    a) 다수의 데이터 구조의 각각에 대응하는 정렬 조건을 측정하는 단계; 및
    b) 상기 정렬 조건을 기초로하여 데이터 메모리 내에 상기 다수의 데이터 구조의 기억장소를 정렬하는 단계 및
    (c) 상기 정렬하는 단계에서 정렬된 데이터 구조의 전체 사이즈를 측정하는 단계 및 상기 정렬된 데이터 구조의 전체 사이즈가 동일한 데이터 구조들로 기억 장소를 그룹화하는 단계를 컴퓨터가 수행하도록 하는 컴퓨터 판독가능 프로그램 코드를 포함하는 제조물.
  19. 삭제
  20. 메모리 사용을 증가하기 위하여 그 안에 삽입된 컴퓨터 판독가능 프로그램 코드 수단을 갖는 컴퓨터 사용가능 매체를 포함하는 제조물로서,
    상기 제조물 내의 컴퓨터 판독가능 프로그램 코드 수단은
    a) 프로그램 리프리젠테이션을 수신하는 단계;
    b) 상기 프로그램 리프리젠테이션의 실행 전에 상기 프로그램 리프리젠테이션의 메모리 사용 조건을 결정하는 단계; 및
    c) 상기 메모리 사용 조건을 기초로하여 메모리를 할당하도록 상기 프로그램 리프리젠테이션을 변경하는 단계를 컴퓨터가 수행하도록 하는 컴퓨터 판독가능 프로그램 코드 수단을 포함하는 제조물.
  21. 삭제
  22. 삭제
  23. 메모리 사용을 증가하기 위한 방법 단계를 수행하기 위하여 기계에 의해서 판독할 수 있으며, 상기 기계에 의해서 실행할 수 있는 명령의 프로그램을 실체적으로 구현하며,
    상기 방법은,
    a) 다수의 데이터 구조의 각각에 대응하는 정렬 조건을 측정하는 단계; 및
    b) 상기 정렬 조건을 기초로하여 데이터 메모리 내에 상기 다수의 데이터 구조의 기억장소를 정렬하는 단계 및
    (c) 상기 정렬 단계에서 정렬된 데이터 구조의 전체 사이즈를 측정하는 단계 및 상기 정렬된 데이터 구조의 전체 사이즈가 동일한 데이터 구조들로 기억 장소를 그룹화하는 단계를 포함하는 프로그램 기억 장치.
  24. 메모리 사용을 증가시키기 위한 방법 단계를 수행하기 위하여 기계에 의해서 판독하능하며, 상기 기계에 의해서 실행할 수 있는 명령의 프로그램을 실체적으로 구현하며, 상기 방법은
    a) 프로그램 리프리젠테이션을 수신하는 단계;
    b) 상기 프로그램 리프리젠테이션의 실행 전에 상기 프로그램 리프리젠테이션의 메모리 사용 조건을 결정하는 단계; 및
    c) 상기 메모리 사용 조건을 기초로하여 메모리를 할당하도록 상기 프로그램 리프리젠테이션을 변경하는 단계를 포함하는 프로그램 기억 장치.
KR1020000006159A 1999-02-10 2000-02-10 메모리 관리를 위한 방법 및 장치 KR100349958B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US09/247,495 US6401182B1 (en) 1999-02-10 1999-02-10 Method and apparatus for memory management
US9/247,495 1999-02-10
US09/247,495 1999-02-10

Publications (2)

Publication Number Publication Date
KR20000076636A KR20000076636A (ko) 2000-12-26
KR100349958B1 true KR100349958B1 (ko) 2002-08-23

Family

ID=22935146

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020000006159A KR100349958B1 (ko) 1999-02-10 2000-02-10 메모리 관리를 위한 방법 및 장치

Country Status (4)

Country Link
US (1) US6401182B1 (ko)
JP (1) JP3422743B2 (ko)
KR (1) KR100349958B1 (ko)
TW (1) TW460783B (ko)

Families Citing this family (18)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6546551B1 (en) * 1999-09-28 2003-04-08 International Business Machines Corporation Method for accurately extracting library-based object-oriented applications
US6697074B2 (en) * 2000-11-28 2004-02-24 Nintendo Co., Ltd. Graphics system interface
US6985916B2 (en) * 2002-08-29 2006-01-10 International Business Machines Corporation Method, system, and article of manufacture for returning physical volumes
US7100015B1 (en) * 2003-09-15 2006-08-29 Sun Microsystems, Inc. Redirecting external memory allocation operations to an internal memory manager
ATE466334T1 (de) * 2004-02-27 2010-05-15 Ericsson Telefon Ab L M Programmieren eines flash-speichers
US7506329B1 (en) * 2004-05-04 2009-03-17 Sun Microsystems, Inc. Method and system for targeting profile gathering through real-time data
US7774787B2 (en) * 2005-01-11 2010-08-10 Microsoft Corporation Method for specifying and verifying multi-threaded object-oriented programs with invariants
US7590978B2 (en) 2005-04-15 2009-09-15 Microsoft Corporation Inferring object invariant method and system
US7559054B2 (en) * 2005-04-19 2009-07-07 Microsoft Corporation Abstract interpretation with a congruence abstract domain and/or a heap succession abstract domain
US7809918B1 (en) * 2005-07-22 2010-10-05 American Megatrends, Inc. Method, apparatus, and computer-readable medium for providing physical memory management functions
US7908454B2 (en) * 2007-06-26 2011-03-15 Microsoft Corporation Application-specific heap management
WO2010122674A1 (ja) * 2009-04-23 2010-10-28 株式会社日立製作所 計算機システム及びその制御方法
US8386418B2 (en) * 2009-11-30 2013-02-26 International Business Machines Corporation System and method for an intelligent storage service catalog
US8522216B2 (en) 2010-05-04 2013-08-27 Oracle International Corporation Memory leak detection
US8504878B2 (en) * 2010-05-04 2013-08-06 Oracle International Corporation Statistical analysis of heap dynamics for memory leak investigations
US9213530B2 (en) * 2013-08-15 2015-12-15 Oracle International Corporation Runtime memory throttling
US9372990B2 (en) 2014-08-29 2016-06-21 International Business Machines Corporation Detecting heap spraying on a computer
US10515430B2 (en) * 2015-11-03 2019-12-24 International Business Machines Corporation Allocating device buffer on GPGPU for an object with metadata using access boundary alignment

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5335332A (en) * 1991-12-24 1994-08-02 International Business Machines Corporation Method and system for stack memory alignment utilizing recursion

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5784699A (en) * 1996-05-24 1998-07-21 Oracle Corporation Dynamic memory allocation in a computer using a bit map index
US5903900A (en) * 1997-04-23 1999-05-11 Sun Microsystems, Inc. Method and apparatus for optimizing exact garbage collection of array nodes in a carded heap
CA2212316C (en) * 1997-07-31 2001-02-13 Ibm Canada Limited - Ibm Canada Limitee A method of recognizing fixed and variable sized data objects in memory

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5335332A (en) * 1991-12-24 1994-08-02 International Business Machines Corporation Method and system for stack memory alignment utilizing recursion

Also Published As

Publication number Publication date
TW460783B (en) 2001-10-21
KR20000076636A (ko) 2000-12-26
US6401182B1 (en) 2002-06-04
JP2000242551A (ja) 2000-09-08
JP3422743B2 (ja) 2003-06-30

Similar Documents

Publication Publication Date Title
KR100349958B1 (ko) 메모리 관리를 위한 방법 및 장치
KR100686418B1 (ko) 멀티-스레드 가상머신에서 메모리 할당방법 및 그 장치
US8453132B2 (en) System and method for recompiling code based on locality domain and thread affinity in NUMA computer systems
US6598141B1 (en) Manipulating interior pointers on a stack during garbage collection
US6845501B2 (en) Method and apparatus for enabling a compiler to reduce cache misses by performing pre-fetches in the event of context switch
US6275830B1 (en) Compile time variable size paging of constant pools
Kistler et al. Automated data-member layout of heap objects to improve memory-hierarchy performance
US20070136546A1 (en) Use of Region-Oriented Memory Profiling to Detect Heap Fragmentation and Sparse Memory Utilization
US6701520B1 (en) Preventing garbage collection of objects in object oriented computer programming languages
EP1260901A2 (en) Method and apparatus for managing hashed objects
US8473900B2 (en) Combining classes referenced by immutable classes into a single synthetic class
US5940621A (en) Language independent optimal size-based storage allocation
US20040186863A1 (en) Elision of write barriers for stores whose values are in close proximity
US7065676B1 (en) Multi-threaded memory management test system with feedback to adjust input parameters in response to performance
US20070300210A1 (en) Compiling device, list vector area assignment optimization method, and computer-readable recording medium having compiler program recorded thereon
Shao et al. Efficient and safe-for-space closure conversion
Wang et al. On improving heap memory layout by dynamic pool allocation
US20120005460A1 (en) Instruction execution apparatus, instruction execution method, and instruction execution program
US7240341B2 (en) Global constant pool to allow deletion of constant pool entries
US6571387B1 (en) Method and computer program product for global minimization of sign-extension and zero-extension operations
US6275985B1 (en) Method and apparatus for developing an application that implements garbage collection efficiently by combining proxy objects with compiler support
Nilsen et al. The real-time behavior of dynamic memory management in C++
US6636866B1 (en) System and method for object representation in an object-oriented programming language
Halli et al. Performance comparison between Java and JNI for optimal implementation of computational micro-kernels
KR100315500B1 (ko) 메모리할당방법

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right
GRNT Written decision to grant
FPAY Annual fee payment

Payment date: 20060725

Year of fee payment: 5

LAPS Lapse due to unpaid annual fee