鐜板湪go璇█姣旇緝嫻佽鐨勬湁leaf,gowold,origin銆傚墠涓や釜姣旇緝鍩虹錛屽疄鐜伴泦緹よ繕闇瑕佽繘琛屼簩嬈$殑緙栫爜璁捐銆俹rigin涓嶄竴鏍鳳紝鍙渶瑕侀氳繃閰嶇疆鏂逛究蹇熺殑闆嗙兢銆?/span>origin鎬諱綋璁捐濡俫o璇█璁捐涓鏍鳳紝鎬繪槸灝藉彲鑳界殑鎻愪緵綆媧佸拰鏄撶敤鐨勬ā寮忥紝蹇熷紑鍙戙?鑳藉鏍規(guī)嵁涓氬姟闇姹傚揩閫熷茍鐏墊椿鐨勫埗瀹氭湇鍔″櫒鏋舵瀯銆?鍒╃敤澶氭牳浼樺娍錛屽皢涓嶅悓鐨剆ervice閰嶇疆鍒頒笉鍚岀殑node錛屽茍鑳介珮鏁堢殑鍗忓悓宸ヤ綔銆?灝嗘暣涓紩鎿庢娊璞′笁澶у璞★紝node,service,module銆傞氳繃緇熶竴鐨勭粍鍚堟ā鍨嬬鐞嗘父鎴忎腑鍚勫姛鑳芥ā鍧楃殑鍏崇郴銆?nbsp;
origin寮曟搸涓夊ぇ瀵硅薄鍏崇郴
---------------
* Node: 鍙互璁や負姣忎竴涓狽ode浠h〃鐫涓涓猳rigin榪涚▼
* Service:涓涓嫭绔嬬殑鏈嶅姟鍙互璁や負鏄竴涓ぇ鐨勫姛鑳芥ā鍧楋紝浠栨槸Node鐨勫瓙闆嗭紝鍒涘緩瀹屾垚騫跺畨瑁匩ode瀵硅薄涓傛湇鍔″彲浠ユ敮鎸佸澶栭儴RPC絳夊姛鑳姐?/div>
* Module: 榪欐槸origin鏈灝忓璞″崟鍏冿紝寮虹儓寤鴻鎵鏈夌殑涓氬姟妯″潡閮藉垝鍒嗘垚鍚勪釜灝忕殑Module緇勫悎錛宱rigin寮曟搸灝嗙洃鎺ф墍鏈夋湇鍔′笌Module榪愯鐘舵侊紝渚嬪鍙互鐩戞帶瀹冧滑鐨勬參澶勭悊鍜屾寰幆鍑芥暟銆侻odule鍙互寤虹珛鏍戠姸鍏崇郴銆係ervice鏈韓涔熸槸Module鐨勭被鍨嬨?br />
鏇村姞璇︾粏鐨勫弬鐓ч」鐩湴鍧錛?a >https://github.com/duanhf2012/origin

]]>
- 涓孌電敤浜庣洃嫻婥++鍐呭瓨瓚婄晫鐨勪唬鐮?錛?VC++錛孏CC緙栬瘧嫻嬭瘯閫氳繃http://www.shnenglu.com/API/archive/2014/08/22/208099.htmlC++鎶鏈腑蹇?/dc:creator>C++鎶鏈腑蹇?/author>Fri, 22 Aug 2014 08:53:00 GMThttp://www.shnenglu.com/API/archive/2014/08/22/208099.htmlhttp://www.shnenglu.com/API/comments/208099.htmlhttp://www.shnenglu.com/API/archive/2014/08/22/208099.html#Feedback0http://www.shnenglu.com/API/comments/commentRss/208099.htmlhttp://www.shnenglu.com/API/services/trackbacks/208099.html#ifndef _CHECKMEMOVERFLOW_H_
#define _CHECKMEMOVERFLOW_H_
#define CHECK_MEM_OVERFLOW
#ifdef CHECK_MEM_OVERFLOW
//鎿嶄綔緋葷粺鍐呭瓨鍒嗛厤綺掑害涓洪〉闈紙4K錛?/span>
#define PAGE_SIZE 4096
#define PLATFORM_WIN32
#ifdef PLATFORM_WIN32
#include <stdlib.h>
#include <windows.h>
/*
* oooooooo
ooooo | *******
*
(*)acture memory pages | protect page
*/
inline void * operator new (size_t size)
{
size_t page_num = (size_t)(size / PAGE_SIZE);
size_t offset = 0;
if(0 != (size % PAGE_SIZE))
{
page_num++;
offset = PAGE_SIZE - size % PAGE_SIZE;
}
void *p = VirtualAlloc(NULL,page_num*PAGE_SIZE+1,MEM_COMMIT,PAGE_READWRITE);
void *pchecker = (char*)p + page_num*PAGE_SIZE;
DWORD old_value;
VirtualProtect(pchecker,PAGE_SIZE,PAGE_NOACCESS,&old_value);
return (char *)p + offset;
}
inline void operator delete(void *p)
{
void* address = (char *)p - (size_t)(p) % PAGE_SIZE;
VirtualFree(address,0,MEM_RELEASE);
}
#else
#include <stdlib.h>
#include <sys/mman.h>
#include <stdio.h>
/*
* ********* |oooooooooooooooo
ooooo | ***********
* size page |
(*)acture memory pages | protect page
*/
//gcc : connot be inline
void * operator new (size_t size)
{
//calc page num and offset
int page_num = (int)(size / PAGE_SIZE + 1);
size_t offset = page_num * PAGE_SIZE - size;
//alloc memory pages
void *p = mmap(NULL,page_num*PAGE_SIZE+2,PROT_READ|PROT_WRITE,MAP_PRIVATE | MAP_ANON, -1, 0);
//saved page num
size_t* pSize = (size_t*)((char*)p+PAGE_SIZE-sizeof(size_t));
*pSize = page_num+2;
mprotect(p, PAGE_SIZE, PROT_NONE);
//set memory overflow protect page
void *pchecker = (char*)p + page_num*PAGE_SIZE;
mprotect(pchecker, PAGE_SIZE, PROT_NONE);
return (char *)p + offset;
}
void operator delete(void *p)
{
//calc acture memory page start address
void* address = (char *)p - (size_t)p % PAGE_SIZE;
mprotect((char*)address-PAGE_SIZE, PAGE_SIZE, PROT_READ);
size_t pagenum = (size_t)*((char*)address-sizeof(size_t));
munmap((char*)address-PAGE_SIZE, pagenum*PAGE_SIZE);
}
#endif
#endif
//#define TEST_OVERFLOW
#ifdef TEST_OVERFLOW
#include <stdio.h>
int main(int argc,char *argv[])
{
printf("test start
\n");
char * a = new char[12340];
printf("%c\n",a[12340]); //紼嬪簭榪愯鍒拌繖閲屽皢鍑虹幇debug涓柇
delete[] a;
printf("test done
\n");
return 0;
}
#endif
#endif
鍘熺悊錛?/p>
1錛岄噸杞藉叏灞new/delete錛屾帴綆″唴瀛樼敵璇?閲婃斁錛?/p>
2.a錛屽湪windows涓嬶紝欏甸潰鏈灝忓垎閰嶅崟浣嶄負4K錛岃皟鐢╒irtualAlloc鍒嗛厤鍐呭瓨錛屽茍鍦ㄦ渶鍚庝竴涓〉闈㈠悗闈㈡坊鍔犱竴涓?#8220;鍝ㄥ叺”欏甸潰錛岄〉闈㈠睘鎬т負NOACCESS錛岃鍐欒欏甸潰鍧嘽rash錛?/p>
2.b錛屽湪linux涓嬶紝鍘熺悊鍚屼笂錛屼絾蹇呴』鍦ㄧ敵璇風殑鍐呭瓨鍓嶉潰澶氱敵璇蜂竴涓〉闈繚瀛樼敵璇風殑欏甸潰鏁幫紱
娉ㄦ剰錛?/p>
鍙兘鍦–++涓嬌鐢紝windows/mac涓嬫祴璇曢氳繃銆?/p>
浣跨敤鏂規(guī)硶錛?br />
鍙include榪欎釜澶存枃浠跺嵆鍙紝涓斿唴瀛樺繀欏繪槸new鍑烘潵鐨勶紝鑰岄潪malloc鐨勩?/p>
鍙傝冿細
1錛宧ttp://www.wangchao.net.cn/bbsdetail_65784.html
2錛宧ttp://blog.csdn.net/cjfeii/article/details/9122279

]]>