½ÃÀÛÁÖ¼Ò°¡ ½Ã½ºÅÛ ¿¹¾à ´ÜÀ§¿¡ Á¤·ÄµÇ´Âµ¥(À©µµ¿ì64KB)
ÀÌ°É ÀÌ°ÍÀÇ ¹è¼ö·Î ÇÏ°í ½Í¾î¿ä(128 256 512..)
±âº» ÀüÁ¦´Â ÁÖ¼ÒÀÇ ³¶ºñ°¡ ¾ø¾î¾ß Çϱ¸¿ä
(Reserve ÇÏ°í ¾È¾´´Ù´øÁö ÇÏ´Â)
ÀÏ´Ü ½ÃµµÇغ»°Ç ÀÌ·¡¿ä
#include "stdafx.h"
int main()
{
const size_t system_alignment = 64 * 1024;
const size_t need_alignment = system_alignment * 10;
const size_t rate = need_alignment / system_alignment;
const size_t need_size = need_alignment * 2;
const size_t reserve_size = need_size + system_alignment * (rate-1);
size_t pAll = (size_t)::VirtualAlloc(0, reserve_size, MEM_RESERVE, PAGE_NOACCESS);
size_t pEND = pAll + reserve_size;
size_t u = (size_t)pAll / need_alignment;
size_t d = (size_t)pAll % need_alignment;
std::cout << "Reserev " << (void*)pAll << std::endl;
size_t s = u * need_alignment;
if(d)
s += need_alignment;
size_t e = s + need_size;
printf("[%p ~]///[%p ~]///[%p ~][END %p]\n", (void*)pAll, (void*)s, (void*)e, (void*)pEND);
std::cout << "----------------\n";
printf("FrontSize: %Iu %IuKB\n", s - pAll, (s - pAll)/1024);
printf("Body: %Iu %IuKB\n", need_size, need_size/1024);
printf("BackSize: %Iu %IuKB\n", pEND - e, (pEND - e)/1024);
std::cout << "----------------\n";
if(pAll != s)
{
auto p = ::VirtualFree((void*)pAll, s - pAll, MEM_RELEASE);
std::cout << "Free Front " << p << std::endl;
}
if(pEND != e)
{
auto p = ::VirtualFree((void*)e, pEND - e, MEM_RELEASE);
std::cout << "Free Back " << p << std::endl;
}
byte* pResult = (byte*)::VirtualAlloc((void*)s, need_size, MEM_COMMIT, PAGE_READWRITE);
std::cout << "Commit " << (void*)pResult << std::endl;
for(size_t i=0; i<need_size; i++)
{
*(pResult+i) = 0xff;
}
system("pause");
// ¿¡·¯ Å×½ºÆ®
for(size_t i=pAll; i<s; i++)
*(byte*)i = 0xff;
for(size_t i=e; i<pEND; i++)
*(byte*)i = 0xff;
system("pause");
return 0;
}
¿ä¾àÇÏÀÚ¸é ½Ã½ºÅÛ¿¹¾à´ÜÀ§64KB¸¦ ÀüÁ¦·Î
¹èÀ² = ¿ä±¸ Á¤·Ä´ÜÀ§ / 64KB
¿¹¾à¿äûũ±â = ¿ä±¸¸Þ¸ð¸® + 64KB *(¹èÀ²-1)
¸Þ¸ð¸® ¿¹¾à¿äû(¿¹¾à¿äûũ±â)
°á°ú ÁÖ¼Ò¿¡¼ ¿ä±¸µÈ Á¤·Ä´ÜÀ§ À§Ä¡¸¦ ã¾Æ
ÇÊ¿ä¾ø´Â ¾Õ, µÚ ÁÖ¼Ò¸¦ ¿¹¾àÇØÁ¦
À̰ǵ¥ ¿ª½Ã Release ´Â Reserve ÇÑ°Å Åë°·Î ÇØ¾ß Çؼ ½ÇÆÐÇϳ׿ä
°ü·Ã ÇÔ¼ö°¡ ÀÖÀ»°Å °°Àºµ¥ ãÁö¸¦ ¸øÇÏ°Ú¾î¿ä
±âŸ, _algined_malloc °°Àº °ÍÀº Á¤·Ä´ÜÀ§ 192KB ¿¡¼ Æã ÇØ¿ä
Áú¹® | 1365¸íÀÌ Àоú¾î¿ä. 3.129.70.254