์ƒˆ์†Œ์‹

๋ฐ˜์‘ํ˜•
C++/๋ฌธ๋ฒ•

C++ malloc๊ณผ new์˜ ์ฐจ์ด

  • -
๋ฐ˜์‘ํ˜•

๐Ÿ‘‰ ํฌ์ŠคํŒ… ๋‚ด์šฉ

  • ์˜ค๋Š˜์€ malloc๊ณผ new์˜ ์ฐจ์ด์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

 

๐Ÿ‘‰ ์ฐจ์ด์ 

์ผ๋‹จ ๋‘˜ ๋‹ค ํž™ ์˜์—ญ์— ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ• ๋‹นํ•˜๋Š” ํ•จ์ˆ˜๋ฅผ ๋™์ผํ•œ๋ฐ 1๊ฐ€์ง€ ๋‹ค๋ฅธ ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค

  • malloc : ํž™ ์˜์—ญ์— size๋งŒํผ ๊ณต๊ฐ„์„ ํ• ๋‹นํ•ฉ๋‹ˆ๋‹ค.
  • new : ํž™ ์˜์—ญ์—์— size๋งŒํผ ๊ณต๊ฐ„์„ ํ• ๋‹นํ•˜๊ณ  ๊ฐ์ฑ„์˜ ์ƒ์„ฑ์ž๋ฅผ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค.

๋‹ค์Œ ์ฝ”๋“œ๋ฅผ๋ณด๋ฉด ๋ณด๋‹ค ํ™•์‹คํ•˜๊ฒŒ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

โœ… ์ฝ”๋“œ

#include <iostream>

using namespace std;

class A 
{
public:
	A() { cout << "์ƒ์„ฑ์ž ํ˜ธ์ถœ" << endl; }
	~A() { cout << "์†Œ๋ฉธ์ž ํ˜ธ์ถœ" << endl; }
};

int main()
{
	A* memory = (A*)malloc(sizeof(A));
	A* a = new A();
}


โœ… ์‹คํ–‰๊ฒฐ๊ณผ

// ์ƒ์„ฑ์ž ํ˜ธ์ถœ

์‹คํ–‰๊ฒฐ๊ณผ๋ฅผ ๋ณด๋ฉด์•Œ ์ˆ˜ ์žˆ๋“ฏ์ด ์ƒ์„ฑ์ž ํ˜ธ์ถœ์ด 1๋ฒˆ๋งŒ ์‹คํ–‰๋˜๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์ด์ฒ˜๋Ÿผ malloc์€ ํž™ ์˜์—ญ์— ๊ณต๊ฐ„๋งŒ ์ƒ์„ฑ, new๋Š” ๊ณต๊ฐ„ ์ƒ์„ฑ ํ›„ ๊ฐ์ฒด ์ƒ์„ฑ์ž ํ˜ธ์ถœ๊นŒ์ง€ ๋œ๋‹ค๋Š” ๊ฑธ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๐Ÿ‘‰ malloc์œผ๋กœ ์ƒ์„ฑ ํ›„ ์ƒ์„ฑ์ž ํ˜ธ์ถœ

๊ทธ๋Ÿผ malloc ํ•จ์ˆ˜๋กœ ์ƒ์„ฑํ›„ ์ƒ์„ฑ์ž๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ์—†์„๊นŒ์š”?
๋ฌผ๋ก  ์ด ๋˜ํ•œ new์—์„œ ์ง€์›ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

 

โœ… ์ฝ”๋“œ 

#include <iostream>

using namespace std;

class A 
{
public:
	A() { cout << "์ƒ์„ฑ์ž ํ˜ธ์ถœ" << endl; }
	~A() { cout << "์†Œ๋ฉธ์ž ํ˜ธ์ถœ" << endl; }
};

int main()
{
	A* memory = (A*)malloc(sizeof(A));
	new(memory) A();
}

 

โœ… ์‹คํ–‰๊ฒฐ๊ณผ

// ์ƒ์„ฑ์ž ํ˜ธ์ถœ

์œ„ ์ฝ”๋“œ์™€ ๊ฐ™์ด new(value name) type() ํ˜•ํƒœ๋กœ ํ˜ธ์ถœ ์‹œ ์ƒ์„ฑ์ž๊ฐ€ ์ •์ƒ์ ์œผ๋กœ ํ˜ธ์ถœ๋˜๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
C++ ํ• ๋‹น์€ new๋ฅผ ๊ธฐ๋ณธ์œผ๋กœ ํ•˜๊ณ  ์žˆ๊ธฐ์— new๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ๊ถŒ์žฅํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.
ํ•˜์ง€๋งŒ VirtualAlloc์„ ์ด์šฉํ•˜์—ฌ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ด€๋ฆฌํ•˜๊ณ  ์‹ถ์„ ๊ฒฝ์šฐ ๋‹ค์Œ ๊ธ€์—์„œ ํ™•์ธํ•˜์‹œ๊ธธ ๋ฐ”๋ž๋‹ˆ๋‹ค.

 

๐Ÿ‘‰ Freeํ•จ์ˆ˜ ํ˜ธ์ถœ ์ „ ์ƒ์„ฑ์ž ํ˜ธ์ถœ

โœ… ์ฝ”๋“œ 

memory->~A();
free(memory);

 

โœ… ์‹คํ–‰๊ฒฐ๊ณผ

// ์†Œ๋ฉธ์ž ํ˜ธ์ถœ

์ด์ฒ˜๋Ÿผ malloc์œผ๋กœ ์ƒ์„ฑ๋œ ๊ณต๊ฐ„์„ free๋กœ ํ•ด์ œํ•˜๊ณ  ์‹ถ์„ ๊ฒฝ์šฐ ๊ฐ์ฒด์˜ ์†Œ๋ฉธ์ž๋ฅผ ์ง์ ‘ ํ˜ธ์ถœ ํ›„ free() ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋ฐ˜์‘ํ˜•
Contents

ํฌ์ŠคํŒ… ์ฃผ์†Œ๋ฅผ ๋ณต์‚ฌํ–ˆ์Šต๋‹ˆ๋‹ค

์ด ๊ธ€์ด ๋„์›€์ด ๋˜์—ˆ๋‹ค๋ฉด ๊ณต๊ฐ ๋ถ€ํƒ๋“œ๋ฆฝ๋‹ˆ๋‹ค.