内存的非法读写操作的检查
valgrind什么的就不说了
AddressSanitizer
除了heap,stack的也可以
https://en.wikipedia.org/wiki/AddressSanitizer#Stack-buffer-overflow
http://developerblog.redhat.com/2014/12/02/address-and-thread-sanitizers-gcc/
tcmalloc的page fence
局限是只能对heap做越界读写的检查
http://www.xuebuyuan.com/1466812.html
http://gperftools.googlecode.com/files/gperftools-2.0.tar.gz
修改了代码,打开了内存越界检查的文件。修改如下:
sed -i "s/EnvToBool(\"TCMALLOC_PAGE_FENCE\", false)/EnvToBool(\"TCMALLOC_PAGE_FENCE\", true)/g" src/debugallocation.cc
意思是:
src/debugallocation.cc: 101
DEFINE_bool(malloc_page_fence,
EnvToBool("TCMALLOC_PAGE_FENCE", false),
"Enables putting of memory allocations at page boundaries "
"with a guard page following the allocation (to catch buffer "
"overruns right when they happen).");
将
EnvToBool("TCMALLOC_PAGE_FENCE", false)
改成了
EnvToBool("TCMALLOC_PAGE_FENCE", true)
cd gperftools-2.0 && ./configure --enable-frame-pointers && make