[C++应用程序性能优化]内存分配失败处理
2012-12-30 13:57
627 查看
c++中new_handler()函数,通过set_new_handler()安装到系统上,new_handler()要执行下述操作一种:
(1)使new有更多的内存可用,然后返回
(2)抛出一个bad_alloc()或其派生的异常
(3)调用abort()或exit()退出
(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; }
相关文章推荐
- [C++应用程序性能优化]程序使用内存区
- c++程序大数据量处理性能优化
- C++中malloc/free与new/delete的区别及内存分配失败错误处理
- C/C++中内存分配失败的处理方法
- 程序性能优化之 内存分配影响
- 改善C++ 程序的150个建议学习之建议30:new内存失败后的正确处理
- C/C++:程序的内存分配方式
- C/C++程序到内存分配个人总结
- Xen环境下的内存与CPU分配:性能优化
- C/C++程序内存分配详解
- 使用tcmmaloc优化mysql的内存分配性能
- 《Spark大数据处理:技术、应用与性能优化》【PDF】
- C/C++程序到内存分配个人总结
- c/c++ 程序内存分配
- 探讨C++ 变量生命周期、栈分配方式、类内存布局、Debug和Release程序的区别2
- C++高效编程:内存与性能优化
- 简述 C、 C++程序编译的内存分配情况?
- 程序性能的初步优化与分析(以 C++ 为例)
- C/C++程序内存分配详解【转】
- Spark大数据处理:技术、应用与性能优化(全).pdf