๋ฐ˜์‘ํ˜•

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

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

 

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

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

luckygg.tistory.com

์„ฑ๋Šฅ ํ”„๋กœํŒŒ์ผ๋Ÿฌ(Performance Profiler)

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

https://visualstudio.microsoft.com/ko/vs/compare/

 

Visual Studio ์ œํ’ˆ ๋น„๊ต | Visual Studio

Visual Studio 2019 ์ œํ’ˆ์„ ๋น„๊ตํ•˜์—ฌ ๊ฐ€์žฅ ์ ํ•ฉํ•œ ๋„๊ตฌ ๋ฐ ๋ฆฌ์†Œ์Šค ์ง‘ํ•ฉ์„ ์ฐพ์œผ์„ธ์š”. Visual Studio, Test Professional ๋ฐ MSDN ํ”Œ๋žซํผ์„ ๋น„๊ตํ•˜์„ธ์š”.

visualstudio.microsoft.com

Visual Studio ๋ฒ„์ „ ๋ณ„ ์ฐจ์ด

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

https://docs.microsoft.com/ko-kr/visualstudio/profiling/?view=vs-2019

 

Visual Studio์—์„œ ์„ฑ๋Šฅ ์ธก์ • - Visual Studio

ํ”„๋กœํŒŒ์ผ๋ง ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์„ฑ๋Šฅ์„ ์ธก์ •ํ•˜๋Š” ๋ฐ Visual Studio๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ์•„๋ด…๋‹ˆ๋‹ค.

docs.microsoft.com

์„ฑ๋Šฅ ํ”„๋กœํŒŒ์ผ๋Ÿฌ๋ฅผ ์ด์šฉํ•œ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰ ์ ๊ฒ€ ๋ฐฉ๋ฒ•

MFC Dialog ํ”„๋กœ์ ํŠธ ๊ธฐ๋ฐ˜์œผ๋กœ, ์„ฑ๋Šฅ ํ”„๋กœํŒŒ์ผ๋Ÿฌ๋ฅผ ์ด์šฉํ•˜์—ฌ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰์„ ์ ๊ฒ€ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์„ฑ๋Šฅ ํ”„๋กœํŒŒ์ผ๋Ÿฌ ๋ฉ”๋‰ด๋Š” Visual Studio ์ƒ๋‹จ์˜ ๋””๋ฒ„๊ทธ ๋ฉ”๋‰ด์— ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹จ์ถ•ํ‚ค๋Š” Alt + F2 ์ž…๋‹ˆ๋‹ค.

์„ฑ๋Šฅ ํ”„๋กœํŒŒ์ผ๋Ÿฌ ๋ฉ”๋‰ด

์„ฑ๋Šฅ ํ”„๋กœํŒŒ์ผ๋Ÿฌ๋ฅผ ํด๋ฆญํ•˜๋ฉด, ์•„๋ž˜์™€ ๊ฐ™์ด ๋ถ„์„ ๋Œ€์ƒ๊ณผ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๋„๊ตฌ๊ฐ€ ๋ณด์ž…๋‹ˆ๋‹ค. 

์„ฑ๋Šฅ ํ”„๋กœํŒŒ์ผ๋Ÿฌ ์˜ต์…˜

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

๋ถ„์„ ๋Œ€์ƒ ์˜ต์…˜

์ด๋ฒˆ ์˜ˆ์ œ ์ฝ”๋“œ์—์„œ๋Š” Alloc ๋ฒ„ํŠผ์„ ํด๋ฆญํ•˜๋ฉด, ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ• ๋‹นํ•ฉ๋‹ˆ๋‹ค.

void CMFCApplication1Dlg::OnBnClickedButton1()
{
	m_pBuffer = new byte[100000];
}

๊ทธ๋ฆฌ๊ณ  Free ๋ฒ„ํŠผ์„ ํด๋ฆญํ•˜๋ฉด, ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ•ด์ œํ•ฉ๋‹ˆ๋‹ค.

void CMFCApplication1Dlg::OnBnClickedButton2()
{
	delete[]m_pBuffer;
	m_pBuffer = nullptr;
}

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

๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰ ๋ถ„์„ ์‹œ์ž‘

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

๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰ ๋ถ„์„ ์ค‘์ธ ํ™”๋ฉด

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

๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰ ๋ถ„์„ ๊ฒฐ๊ณผ ํ™”๋ฉด

๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น ์ „์—๋Š” 418.71KB์ด๊ณ , ํ• ๋‹น ํ›„์—๋Š” 98.12KB๊ฐ€ ์ฆ๊ฐ€ํ•œ 516.83KB๋กœ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ํ•ด์ œ ํ›„์—๋Š” 97.08KB๊ฐ€ ๊ฐ์†Œํ•œ 419.74KB๊ฐ€ ๋ฉ๋‹ˆ๋‹ค. ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น ์ „๊ณผ ํ•ด์ œ ํ›„์˜ ์‚ฌ์šฉ๋Ÿ‰์ด ๋‹ค๋ฆ…๋‹ˆ๋‹ค. ๋งˆ์น˜ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ๋ชจ๋‘ ํ•ด์ œ๊ฐ€ ์•ˆ๋œ ๋“ฏํ•œ ๋ชจ์Šต์ธ๋ฐ์š”. ์ด๋Š” ๋ณธ๋ฌธ ํ•˜๋‹จ์—์„œ ๋‹ค์‹œ ์„ค๋ช…ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

์Šค๋ƒ…์ˆ ๊ฐ„์˜ ์ข€ ๋” ์ž์„ธํ•œ ์ •๋ณด๋ฅผ ์ทจ๋“ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š”, ํŠน์ • ์Šค๋ƒ…์ˆ์—์„œ ์šฐ์ธก ๋งˆ์šฐ์Šค๋ฅผ ํด๋ฆญํ•˜์—ฌ ๋‹ค๋ฅธ ์Šค๋ƒ…์ˆ๊ณผ ๋น„๊ตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์Šค๋ƒ…์ˆ ๋น„๊ต ๋ฉ”๋‰ด

์Šค๋ƒ…์ˆ #1๊ณผ #2์˜ ๋น„๊ต ๊ฒฐ๊ณผ๋ฅผ ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์˜ˆ์‹œ ํ”„๋กœ์ ํŠธ์˜ ์ด๋ฆ„์ด MFCApplication1์ด๋ฏ€๋กœ, ํ•ด๋‹น ์ด๋ฆ„๊ณผ ๊ด€๋ จ๋œ ์‹๋ณ„์ž๋ฅผ ์ฐพ์•„๋ณด์•˜์Šต๋‹ˆ๋‹ค. ์ฐพ์€ ๊ฒฐ๊ณผ CMFCApplication1Dlg::OnBnClickedButton1์—์„œ 100,036Byte๊ฐ€ ์ฆ๊ฐ€ํ•œ ๋ชจ์Šต์ด ๋ณด์ž…๋‹ˆ๋‹ค.

์Šค๋ƒ…์ˆ ๋น„๊ต ๊ฒฐ๊ณผ

์šฐ์ธก ์ƒ๋‹จ์˜ 'ํž™ ์ฝ˜ํ…์ธ  ๋ณด๊ธฐ'๋ฅผ ํด๋ฆญํ•˜๋ฉด ์•„๋ž˜์™€ ๊ฐ™์€ ํ™”๋ฉด์ด ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. unsigned char[]๋กœ 100,000Byte์˜ ํฌ๊ธฐ ์ฐจ์ด๊ฐ€ ์žˆ๋‹ค๊ณ  ๋ณด์ž…๋‹ˆ๋‹ค.

ํž™ ํ‘œ์‹œ ํ™”๋ฉด

๊ฐ™์€ ๋ฐฉ๋ฒ•์œผ๋กœ, ์Šค๋ƒ…์ˆ #2์™€ #3์˜ ๋น„๊ต๋ฅผ ์„ค์ •ํ•œ ํ›„ ๋ฉ”๋ชจ๋ฆฌ ๊ฐ์†Œ๋Ÿ‰์„ ๋ถ„์„ํ•ด๋ณด๋ฉด ์•„๋ž˜์˜ ํ™”๋ฉด์ด ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

ํž™ ํ‘œ์‹œ ํ™”๋ฉด

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

win32kfull.sys์—์„œ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ์ด ์ฆ๊ฐ€ํ•œ ๋ชจ์Šต

๊ฒฐ๋ก 

MFC Dialog ํ”„๋กœ์ ํŠธ ๊ธฐ์ค€์œผ๋กœ, win32kfull.sys์—์„œ์˜ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰ ์ฆ๊ฐ€์— ๋Œ€ํ•ด์„œ๋Š” ๋ช…ํ™•ํžˆ ์•Œ ์ˆ˜ ์—†์—ˆ์ง€๋งŒ, ์ ์–ด๋„ ์‚ฌ์šฉ์ž๊ฐ€ ์ƒ์„ฑํ•˜๊ณ  ํ•ด์ œํ•œ ๋ฉ”๋ชจ๋ฆฌ์˜ ์ ๊ฒ€์€ ๊ฐ€๋Šฅํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด์ „ ํฌ์ŠคํŒ…์—์„œ ์„ค๋ช…ํ•œ CRT ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ณด๋‹ค ์‚ฌ์šฉํ•˜๊ธฐ๋„ ํŽธ๋ฆฌํ•˜๊ณ , ๋ฌธ์ œ์ ์„ ์ฐพ๋Š” ๋ฐฉ๋ฒ•๋„ ๋”์šฑ ์‰ฝ๋‹ค๋Š” ๊ฒƒ๋„ ์•Œ ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ๋ณธ๋ฌธ์—์„œ๋Š” ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰ ์ ๊ฒ€๋งŒ ํ–ˆ์ง€๋งŒ, CPU ๋ฐ GPU ์ ๊ฒ€๋„ ๊ฐ€๋Šฅํ•˜๊ณ , ํ”„๋กœ์ ํŠธ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์‹คํ–‰ ํŒŒ์ผ ๋˜๋Š” ํ”„๋กœ์„ธ์Šค๋„ ๋ถ„์„๋„ ๊ฐ€๋Šฅํ•˜๋‹ค๋Š” ์  ์•Œ๊ณ  ๊ณ„์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค.

๋ฐ˜์‘ํ˜•