[C++应用程序性能优化]内存分配失败处理

来源:互联网 发布:淘宝服务中心人工服务 编辑:程序博客网 时间:2024/05/15 05:38

c++中new_handler()函数,通过set_new_handler()安装到系统上,new_handler()要执行下述操作一种:
(1)使new有更多的内存可用,然后返回
(2)抛出一个bad_alloc()或其派生的异常
(3)调用abort()或exit()退出

#include <stdio.h>#include <new>using namespace std;char *gPool;void my_new_handler();int main(){ set_new_handler(my_new_handler); gPool = new char[100*1024*1024]; if (gPool != NULL) {  printf("preserve 101MB memory at %x.\n", gPool); } char *p = NULL; for (int i = 0; i < 20; i++) {  p = new char[100*1024*1024];  printf("%d*100M, p = %x\n", i+1, p); } printf("Done.\n"); return 0;}void my_new_handler(){ if (gPool != NULL) {  printf("try to get more memry...\n");  delete []gPool;  gPool = NULL;  return; } else {  printf("I can not help...\n");  throw bad_alloc(); } return;} #include <stdio.h>#include <stdlib.h>#include <new>using namespace std;int main(){ char buffer[100]; char *p = new(buffer) char[20]; printf("buffer:\t%x\np:\t%x\n", buffer, p); system("pause"); return 0;} #include <stdio.h>#include <stdlib.h>#include <new>using namespace std;void* operator new(size_t n, char *file, int line){ printf("size: %d\n new at %s, %d\n", n, file, line); return ::operator new(n);}void operator delete(void *p, char *file, int line){ printf("delete at %s, %d\n", file, line); ::operator delete(p); return;}#define new new(__FILE__, __LINE__)int main(){ char *p = new char[10]; operator delete(p, __FILE__, __LINE__); system("pause"); return 0;}


 

原创粉丝点击