Skip to content

Instantly share code, notes, and snippets.

@jinny-l
Last active January 12, 2023 09:18
Show Gist options
  • Save jinny-l/97bb5d5cdf65c0a2ee9624de8c3e99cd to your computer and use it in GitHub Desktop.
Save jinny-l/97bb5d5cdf65c0a2ee9624de8c3e99cd to your computer and use it in GitHub Desktop.
Jinny - CS04

๐Ÿง  CS04 - ํ”„๋กœ์„ธ์Šค ๋ฉ”๋ชจ๋ฆฌ ์‹œ๋ฎฌ๋ ˆ์ดํ„ฐ

ํ”„๋กœ์„ธ์Šค ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ ๊ตฌํ˜„

์‹คํ–‰ ์˜ˆ์‹œ

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()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment