资源简介
C++内存管理,在侯捷老师教授下,深入理解C++内存机制。
代码片段和文件信息
// author : Hou Jie (侯捷)
// date : 2015/11/11
// compiler : DevC++ 5.61 (MinGW with GNU 4.9.2)
//
// 說明:這是侯捷 E-learning video “C++內存管理“ 的實例程式.
// 該課程的所有測試都出現在此.
// 每一個小測試單元都被放進一個 namespace 中
// 如此保持各單元間最大的獨立性.
// 每個 namespace 上方皆有該單元相應的 #include <...>
// 因此有可能整個程式重複含入 (included) 某些 headers
// 這無所謂,因為每個 standard headers 都有自我防衛機制,不讓自己被 included 二次.
//
// 本文件用到若干 GNU C++ extended allocators,所以你或許需要在你的集成環境 (IDE) 上設定 “C++11 on“.
// 我已將相關代碼包裝在 編譯條件選項 __GNUC__ 中。
/*
#include
#include
#include
#include //strlen()
#include
#include
*/
using namespace std;
//----------------------------------------------------
#include
#include
#include //std::allocator
#include //欲使用 std::allocator 以外的 allocator 就得自行 #include
namespace jj01
{
void test_primitives()
{
cout << “\ntest_primitives().......... \n“;
void* p1 = malloc(512); //512 bytes
free(p1);
complex* p2 = new complex; //one object
delete p2;
void* p3 = ::operator new(512); //512 bytes
::operator delete(p3);
//以下使用 C++ 標準庫提供的 allocators。
//其接口雖有標準規格,但實現廠商並未完全遵守;下面三者形式略異。
#ifdef _MSC_VER
//以下兩函數都是 non-static,定要通過 object 調用。以下分配 3 個 ints.
int* p4 = allocator().allocate(3 (int*)0);
allocator().deallocate(p43);
#endif
#ifdef __BORLANDC__
//以下兩函數都是 non-static,定要通過 object 調用。以下分配 5 個 ints.
int* p4 = allocator().allocate(5);
allocator().deallocate(p45);
#endif
#ifdef __GNUC__
//以下兩函數都是 static,可通過全名調用之。以下分配 512 bytes.
//void* p4 = alloc::allocate(512);
//alloc::deallocate(p4512);
//以下兩函數都是 non-static,定要通過 object 調用。以下分配 7 個 ints.
void* p4 = allocator().allocate(7);
allocator().deallocate((int*)p47);
//以下兩函數都是 non-static,定要通過 object 調用。以下分配 9 個 ints.
void* p5 = __gnu_cxx::__pool_alloc().allocate(9);
__gnu_cxx::__pool_alloc().deallocate((int*)p59);
#endif
}
} //namespace
//----------------------------------------------------
#include
#include
//#include //std::allocator
namespace jj02
{
class A
{
public:
int id;
A() : id(0) { cout << “default ctor. this=“ << this << “ id=“ << id << endl; }
A(int i) : id(i) { cout << “ctor. this=“ << this << “ id=“ << id << endl; }
~A() { cout << “dtor. this=“ << this << “ id=“ << id << endl; }
};
void test_call_ctor_directly()
{
cout << “\ntest_call_ctor_directly().......... \n“;
string* pstr = new string;
cout << “str= “ << *pstr << endl;
//! pstr->string::string(“jjhou“);
//[Error] ‘class std::basic_string‘ has no member named ‘string‘
//! pstr->~string(); //crash -- 其語法語意都是正確的 crash 只因為上一行被 remark 起來嘛.
cout << “str=
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 1647346 2015-11-17 19:23 C++內存管理示例.exe
文件 184322 2015-12-23 17:20 C++内存管理简介-侯捷.pdf
文件 36386090 2015-12-23 15:45 内存管理.pdf
文件 7959780 2015-12-23 17:40 内存管理第五讲.pdf
文件 15850 2015-11-17 19:23 allocc.h
文件 96268 2015-11-17 19:23 C++內存管理示例.cpp
相关资源
- 基于VS2010MFC平台使用C++编写的上位机
- Programming principles and practice Using C++ (
- 黑马程序员最新24期C/C++全栈培训讲义
- QR码二维码编码C++源代码VS2010编译环境
- QR二维码解码,C++源代码VS2010编译环境
- 11_人脸检测与识别系统.zip
- Visual C++视频会议开发技术与源码.ra
- VC数字图像处理杨淑莹北京交通大学
- C++标准库MSDN离线文档-微软2017-10月发
- 数据结构(C++语言版)第三版超清带
- Visual C++范例大全 400+的
- 《Visual C++网络编程开发与实战》案例
- Visual C++网络编程开发与实战 案例源码
- C++ 孔令德计算机图形学习题答案源代
- VC++实现浏览器
- Visual C++ MFC棋牌类游戏编程五子棋,象
- C++TEST中文帮助文档
- C-Free 5.0
- 轻松搞定C++语言.pdf
- c++人脸相似度检测MFC源码
- 精通Visual C++图像处理编程(PDF & 源代
- 《Visual C++ 6.0 用户界面制作技术与应
- 计算机图形学+配书源代码
- C++编程思路2019最新版
- VC++2017 64位
- C++参考大全 第四版 高清扫描版
- 物资管理系统c++和sql
- SGM C++代码 VS2013
- 操作系统概念:进程调度算法FCFS、
- C++Primer及ppt
评论
共有 条评论