๋ฐ˜์‘ํ˜•

๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜์™€ ๊ด€๋ จ๋œ ํฌ์ŠคํŒ…์€ ์•„๋ž˜ ๋งํฌ๋ฅผ ์ฐธ๊ณ ํ•ด์ฃผ์„ธ์š”.

[๋””๋ฒ„๊น…] ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜์™€ ์ ๊ฒ€ํ•˜๋Š” ๋ฐฉ๋ฒ• ์†Œ๊ฐœ

 

[๋””๋ฒ„๊น…] ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜์™€ ์ ๊ฒ€ํ•˜๋Š” ๋ฐฉ๋ฒ• ์†Œ๊ฐœ

์†Œ๊ฐœ Unmanaged Code์ธ C++์€ ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น๊ณผ ํ•ด์ œ๋ฅผ ๊ฐœ๋ฐœ์ž๊ฐ€ ์ง์ ‘ ํ•ด์ฃผ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ• ๋‹นํ•˜๊ณ  ํ•ด์ œ๋ฅผ ํ•˜์ง€ ์•Š์œผ๋ฉด, ๊ทธ๋Œ€๋กœ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ์ ์œ ๋˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜๋Š” ์–ด๋–ป๊ฒŒ ์ ๊ฒ€ํ• ๊นŒ์š”? ์ ..

luckygg.tistory.com

์†Œ๊ฐœ

์‹คํ–‰ ์ค‘์ธ ํ”„๋กœ๊ทธ๋žจ์˜ ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜๋ฅผ ๊ฐ„๋‹จํ•˜๊ฒŒ ํ™•์ธํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฐ”๋กœ ์œˆ๋„์šฐ์—์„œ ์ œ๊ณตํ•˜๋Š” ์ž‘์—… ๊ด€๋ฆฌ์ž(Task manager)์ž…๋‹ˆ๋‹ค. ๋ณดํ†ต ์ž‘์—… ๊ด€๋ฆฌ์ž๋Š” ์‹คํ–‰ ์ค‘์ธ ํ”„๋กœ๊ทธ๋žจ์ด ๋จนํ†ต์ด ๋˜์—ˆ์„ ๋•Œ ์ข…๋ฃŒํ•˜๊ธฐ ์œ„ํ•ด ๋งŽ์ด ์‚ฌ์šฉํ–ˆ์„ ๊ฑฐ๋ผ ์ƒ๊ฐ๋ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์‹คํ–‰ ์ค‘์ธ ํ”„๋กœ๊ทธ๋žจ์˜ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰ ์ ๊ฒ€ ์šฉ์œผ๋กœ๋„ ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ๋Š” ์ ์„ ์ด๋ฒˆ ํฌ์ŠคํŒ…์„ ํ†ตํ•ด ์†Œ๊ฐœํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

์ž‘์—… ๊ด€๋ฆฌ์ž์˜ ๋ฉ”๋ชจ๋ฆฌ ์˜ต์…˜

์ž‘์—… ๊ด€๋ฆฌ์ž์—์„œ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ ๊ด€๋ จ ์˜ต์…˜์„ ์„ค๋ช…ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ์šฐ์„  ์ž‘์—… ๊ด€๋ฆฌ์ž๋ฅผ ์‹คํ–‰ํ•˜๊ณ , ์„ธ๋ถ€ ์ •๋ณด ๋ฉ”๋‰ด๋ฅผ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

์ž‘์—… ๊ด€๋ฆฌ์ž

๊ทธ๋ฆฌ๊ณ  ๋ฆฌ์ŠคํŠธ ๋ทฐ์˜ ํ—ค๋” ๋ถ€๋ถ„์— ๋งˆ์šฐ์Šค ์šฐ ํด๋ฆญ ํ›„ ์—ด ์„ ํƒ์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค. ์˜ค๋ฅธ์ชฝ ์ฐฝ๊ณผ ๊ฐ™์ด ์—ด ์„ ํƒ ์˜ต์…˜์ด ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

์—ด ์„ ํƒ ์˜ต์…˜

๊ฐ„๋‹จํžˆ ๋ช‡ ๊ฐ€์ง€ ์˜ต์…˜์„ ์„ค๋ช…ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

์˜ต์…˜ ์„ค๋ช…
์ž‘์—… ์ง‘ํ•ฉ(๋ฉ”๋ชจ๋ฆฌ) ๊ฐœ์ธ ์ž‘์—… ์ง‘ํ•ฉ์˜ ๋ฉ”๋ชจ๋ฆฌ ์–‘๊ณผ ํ”„๋กœ์„ธ์Šค์—์„œ ์‚ฌ์šฉ ์ค‘์ด๋ฉฐ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฉ”๋ชจ๋ฆฌ ์–‘์„ ๋”ํ•œ ๊ฐ’์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰, ์ „์ฒด ์‚ฌ์šฉ ์ค‘์ธ ๋ฉ”๋ชจ๋ฆฌ ์–‘์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.
์ตœ๊ณ  ์ž‘์—… ์ง‘ํ•ฉ(๋ฉ”๋ชจ๋ฆฌ) ์‚ฌ์šฉํ•˜๋Š” ์ž‘์—… ์ง‘ํ•ฉ ์ค‘ ์ตœ๋Œ€ ์น˜๋ฅผ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค.
์ž‘์—… ์ง‘ํ•ฉ ๋ธํƒ€(๋ฉ”๋ชจ๋ฆฌ) ์ž‘์—… ์ง‘ํ•ฉ ๋ฉ”๋ชจ๋ฆฌ์˜ ๋ณ€ํ™”๋Ÿ‰์„ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค.
๋ฉ”๋ชจ๋ฆฌ(๊ฐœ์ธ ์ž‘์—… ์ง‘ํ•ฉ) ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค์™€ ๊ณต์œ ํ•  ์ˆ˜ ์—†๋Š” ๋ฉ”๋ชจ๋ฆฌ ์–‘์„ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค.

์‹ค์Šต

์ง€๊ธˆ๊นŒ์ง€, ์ž‘์—… ๊ด€๋ฆฌ์ž์—์„œ ๋ฉ”๋ชจ๋ฆฌ์˜ ์–‘์„ ์ ๊ฒ€ํ•  ์ˆ˜ ์žˆ๋Š” ์˜ต์…˜์„ ์•Œ์•„๋ณด์•˜์Šต๋‹ˆ๋‹ค. ์ด์ œ ์‹ค์Šต์„ ํ†ตํ•ด ์‹ค์ œ ์–ด๋–ป๊ฒŒ ํ‘œ์‹œ๋˜๋Š”์ง€ ํ™•์ธํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์˜ˆ์ œ๋ฅผ ์œ„ํ•ด MFC Dialog ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ ํ›„ ๋ฒ„ํŠผ ๋‘ ๊ฐœ๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

MFC Dialog ์˜ˆ์‹œ

xxxDlg Class์— ๋ฉค๋ฒ„ ๋ณ€์ˆ˜๋กœ std::vector<byte*> m_vBuffers๋ฅผ ์„ ์–ธํ•ฉ๋‹ˆ๋‹ค.

#include <vector>

class CMFCApplication1Dlg : public CDialogEx
{
	// ...
	std::vector<byte*> m_vBuffers;
    // ...
}

Alloc ๋ฒ„ํŠผ์—๋Š” ์•„๋ž˜์™€ ๊ฐ™์ด ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค. ๋ฒ„ํŠผ์„ ํด๋ฆญํ•˜๋ฉด 1MByte๊ฐ€ ํ• ๋‹น๋ฉ๋‹ˆ๋‹ค.

void CMFCApplication1Dlg::OnBnClickedButtonAlloc()
{
	m_vBuffers.push_back(new byte[1024 * 1024]);
}

Free ๋ฒ„ํŠผ์—๋Š” ์•„๋ž˜์™€ ๊ฐ™์ด ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค.

void CMFCApplication1Dlg::OnBnClickedButtonFree()
{
	if (m_vBuffers.size() == 0)
		return;

	std::vector<byte*>::iterator it = m_vBuffers.begin();
	
	delete[] *it;
	*it = nullptr;
	
	m_vBuffers.erase(it);
}

์ด์ œ ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ํ•˜๊ณ  ์ž‘์—… ๊ด€๋ฆฌ์ž์—์„œ ๋ฉ”๋ชจ๋ฆฌ ์–‘์„ ํ™•์ธํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰ ํ›„ ์ž‘์—… ์ง‘ํ•ฉ์€ 15,460KB์˜€์Šต๋‹ˆ๋‹ค. Alloc ๋ฒ„ํŠผ ํด๋ฆญ ํ›„ 1,040KB๊ฐ€ ์ฆ๊ฐ€ํ–ˆ์œผ๋ฉฐ, ์ž‘์—… ์ง‘ํ•ฉ ๋ฐ ์ตœ๊ณ  ์ž‘์—… ์ง‘ํ•ฉ ๋ฉ”๋ชจ๋ฆฌ ์–‘์€ 16,440KB๊ฐ€ ๋์Šต๋‹ˆ๋‹ค.

๋ฉ”๋ชจ๋ฆฌ ์ฆ๊ฐ€๋Ÿ‰ ๋น„๊ต

์ด๋ฒˆ์—” ๋ฐ˜๋Œ€๋กœ Free ๋ฒ„ํŠผ์„ ํด๋ฆญํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ๋ฉ”๋ชจ๋ฆฌ ํ•ด์ œ๋กœ 1,024KB๊ฐ€ ๊ฐ์†Œํ–ˆ๊ณ , ์ž‘์—… ์ง‘ํ•ฉ์€ 15,320KB๊ฐ€ ๋์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ตœ๊ณ  ์ž‘์—… ์ง‘ํ•ฉ์€ ์—ฌ์ „ํžˆ 16,440KB๋ฅผ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค.

๋ฉ”๋ชจ๋ฆฌ ๊ฐ์†Œ๋Ÿ‰ ๋น„๊ต

์ฃผ์˜
 
 

๋ฉ”๋ชจ๋ฆฌ ์ƒ์„ฑ๊ณผ ํ•ด์ œ ํ›„ ์ž‘์—… ์ง‘ํ•ฉ ๋ฐ ๋ฉ”๋ชจ๋ฆฌ ํ‘œ์‹œ๋Ÿ‰์ด ์ •ํ™•ํ•˜์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค. ์ด์ „ ํฌ์ŠคํŒ…์—์„œ ํ™•์ธํ•œ ๊ฒฐ๊ณผ, ํ•จ์ˆ˜ ํ˜ธ์ถœ ์‹œ ์‚ฌ์šฉ์ž์˜ ๋™์  ํ• ๋‹น ์™ธ์—๋„ Windows API ๋‚ด์—์„œ ๋ฉ”๋ชจ๋ฆฌ ์ƒ์„ฑ์œผ๋กœ ์˜ค์ฐจ๊ฐ€ ์ƒ๊ธฐ๋Š” ๊ฒƒ์„ ์•Œ๊ฒŒ ๋์Šต๋‹ˆ๋‹ค.

[๋””๋ฒ„๊น…] ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜๋ฅผ ์ ๊ฒ€ํ•˜๋Š” ๋ฐฉ๋ฒ• - ์„ฑ๋Šฅ ํ”„๋กœํŒŒ์ผ๋Ÿฌ

๊ฒฐ๋ก 

์ž‘์—… ๊ด€๋ฆฌ์ž์˜ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰ ํ‘œ์‹œ ์˜ต์…˜ ์ค‘ ์ž‘์—… ์ง‘ํ•ฉ๊ณผ ์ตœ๊ณ  ์ž‘์—… ์ง‘ํ•ฉ์„ ๋ชจ๋‹ˆํ„ฐ๋งํ•˜์—ฌ, ๋ฉ”๋ชจ๋ฆฌ์˜ ํ˜„์žฌ ์‚ฌ์šฉ๋Ÿ‰๊ณผ ์ตœ๊ณ  ์‚ฌ์šฉ๋Ÿ‰ ์ ๊ฒ€์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ๋ณ„๋„์˜ ๋ชจ๋‹ˆํ„ฐ๋ง ํ”„๋กœ๊ทธ๋žจ์„ ๊ตฌํ˜„ํ•˜์—ฌ, ์ผ์ •ํ•œ ์ฃผ๊ธฐ๋กœ ํŠน์ • ํ”„๋กœ์„ธ์Šค์˜ ์ž‘์—… ์ง‘ํ•ฉ๊ณผ ์ตœ๊ณ  ์ž‘์—… ์ง‘ํ•ฉ์„ ๊ธฐ๋กํ•œ๋‹ค๋ฉด, ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰์ด ์ผ์ •ํ•œ์ง€ ๋˜๋Š” ์„œ์„œํžˆ ์ฆ๊ฐ€ํ•˜๋Š”์ง€ ์•Œ ์ˆ˜ ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋ฐ˜์‘ํ˜•