ํ๋ก์ธ์ค ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ด๋ฆฌํ๋ ํ๋ก๊ทธ๋จ ๊ตฌํ
base = memory.init(1024, 1024)
memory.setSize("short", 4)
memory.setSize("int", 8)
memory.setSize("string", 16)
arrayPointer = memory.malloc("int", 4)
shortPointer = memory.malloc("short", 5)
print(heapdump())
call("foo", 2)
string1 = memory.malloc("crong", 1)
print(callstack())
call("bar", 1)
string2 = memory.malloc("jk", 2)
returnFrom("bar")
free(string1)
print(heapdump())
free(string2)
print(callstack())
garbageCollect()
print(heapdump())
reset()
print(heapdump())
CS ๊ณผ์ ์ด๋ผ ๋น์ฐํ๊ฒ๋ CS ์ฉ์ด๊ฐ ๋ง์ด ๋์จ๋ค.
์๋ฅผ ๋ค๋ฉด "๋ฉ๋ชจ๋ฆฌ ์ฃผ์"๊ฐ ์ ๋ง ๋ง์ด ์ธ๊ธ๋๋ค.
๊ทธ๋์ ํ๋ก๊ทธ๋จ ๊ตฌํ์ ์ํด Java
๋ก ๊ตฌํํ๋ ค๋ฉด ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๋ฅผ ์ด๋ป๊ฒ ํ์ธํ๊ณ ๋ค๋ฃฐ์ง ๋ง๋งํ๋ฐ,
"๋ฉ๋ชจ๋ฆฌ ์ฃผ์"๊ฐ ์๋ค๊ณ ๊ฐ์ ํ๊ณ ๊ตฌํํ๋ ๊ฒ์ด ์ข์ ๊ฒ ๊ฐ๋ค.
์ด๊ฒ ๋ฌด์จ ๋ง์ด๋๋ฉด,
๋ฉ๋ชจ๋ฆฌ์ ๋ฐ์ดํฐ ํฌ๊ธฐ๊ฐ 4๋ฐ์ดํธ์ธ ๊ฒ์ธ int ํ์
age
๊ฐ ์๊ณ ํด๋น ์๋ฃ์ ๊ธฐ๋ณธ ์ฃผ์(base address)์ ํฌ์ธํฐ ์ฃผ์๋ฅผ ํ์ธํด์ผ ํ๋ค๋ฉด
์ค์ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๋ฅผ ๋ค๋ฃจ๋ ๊ฒ์ด ์๋๋ผ ์ธ๋ฑ์ค๋ก ๋ค๋ฃจ๋ ๊ฒ์ด๋ค.
์์๋ ๋ค์๊ณผ ๊ฐ๋ค.
List<Integer> memory // ์๋ฃ๋ฅผ ์ ์ฅํ๋ ๋ฉ๋ชจ๋ฆฌ ์ญํ
void add() {
int baseAddress = memory.size(); // age๊ฐ ์์ํ๋ ์์น
for(int i = 0; i < 32; i++) { // ์๋ฃ ํฌ๊ธฐ๋งํผ ๋ฐ์ดํฐ ์ ์ฅ
memory.add(age);
}
int pointer = memory.size() + age.size(); // ๊ธฐ๋ณธ์ฃผ์์์ ๋จ์ด์ ธ ์๋ ๋งํผ์ ์์น(= ํฌ์ธํฐ ์ฃผ์)
}
ํ์๊ฐ ๋งํ๋ ๊ฒ์ด ์ ๋ต์ ์๋์ง๋ง, ๊ตฌํ๋ถํฐ ๋ง๋งํ ๋ถ์ด ๊ณ์ ๋ค๋ฉด, ์ด ๊ธ์ด ๋์์ด ๋์์ ์ข๊ฒ ๋ค.
- ํฌ์ธํฐ ๋ณ์ ๊ตฌํ(4๋ฐ์ดํธ)
- ์คํ ๋์์ ๋ด๋นํ๋ Stack ํ์ ๋ณ๋ ์ ์ธ
- ๋ด๋ถ์๋
Stack Pointer
๋ณ์๋ก ์ด๋๊น์ง ์์๋์ง ํ์ธํ๋ ๊ธฐ๋ฅ
- 1.
init(stackSize, heapSize)
- 2.
setSize(type, length)
- 3.
malloc(type, count)
- 4.
free(pointer)
- 5.
call(name, paramCount)
- 6.
returnFrom(name)
- 7.
usage()
- 8.
callstack()
- 9.
heapdump
- 10.
garbageCollect()
- 11.
reset()