当前位置: 首页 > news >正文

做网站先用dw还是asp企业社交网站定制

做网站先用dw还是asp,企业社交网站定制,wp做网站,做汽车网站这篇博客将会带着大家解决以下几个问题 1. C/C内存分布 2. C语言中动态内存管理方式 3. C中动态内存管理 4. operator new与operator delete函数 5. new和delete的实现原理 6. 定位new表达式(placement-new) 1. C/C内存分布 我们先来看下面的一段代码和相关问题 int global…这篇博客将会带着大家解决以下几个问题 1. C/C内存分布 2. C语言中动态内存管理方式 3. C中动态内存管理 4. operator new与operator delete函数 5. new和delete的实现原理 6. 定位new表达式(placement-new) 1. C/C内存分布 我们先来看下面的一段代码和相关问题 int globalVar 1; static int staticGlobalVar 1; void Test() { static int staticVar 1; int localVar 1; int num1[10] { 1, 2, 3, 4 }; char char2[] abcd; const char* pChar3 abcd; int* ptr1 (int*)malloc(sizeof(int) * 4); int* ptr2 (int*)calloc(4, sizeof(int)); int* ptr3 (int*)realloc(ptr2, sizeof(int) * 4); free(ptr1); free(ptr3); }1. 选择题 选项: A.栈 B.堆 C.数据段(静态区) D.代码段(常量区) globalVar在哪里____ staticGlobalVar在哪里____ staticVar在哪里____ localVar在哪里____ num1 在哪里____ char2在哪里____ *char2在哪里___ pChar3在哪里____ *pChar3在哪里____ ptr1在哪里____ *ptr1在哪里____ 2. 填空题 sizeof(num1) ____; sizeof(char2) ____; strlen(char2) ____; sizeof(pChar3) ____; strlen(pChar3) ____; sizeof(ptr1) ____; 3. sizeof 和 strlen 区别 【说明】 1. 栈又叫堆栈--非静态局部变量/函数参数/返回值等等栈是向下增长的。 2. 内存映射段是高效的I/O映射方式用于装载一个共享的动态内存库。用户可使用系统接口创建共享共享内存做进程间通信。 3. 堆用于程序运行时动态内存分配堆是可以上增长的。 4. 数据段--存储全局数据和静态数据。 5. 代码段--可执行的代码/只读常量。  2. C语言中动态内存管理方式malloc/calloc/realloc/free  void Test () { int* p1 (int*) malloc(sizeof(int)); free(p1); // 1.malloc/calloc/realloc的区别是什么 int* p2 (int*)calloc(4, sizeof (int)); int* p3 (int*)realloc(p2, sizeof(int)*10); // 这里需要free(p2)吗 free(p3 ); } 3. C内存管理方式 C语言内存管理方式在C中可以继续使用但有些地方就无能为力而且使用起来比较麻烦因此C又提出了自己的内存管理方式通过new和delete操作符进行动态内存管理。 3.1 new/delete操作内置类型 void Test() { // 动态申请一个int类型的空间 int* ptr4 new int; // 动态申请一个int类型的空间并初始化为10 int* ptr5 new int(10); // 动态申请10个int类型的空间 int* ptr6 new int[10]; delete ptr4; delete ptr5; delete[] ptr6; } 注意申请和释放单个元素的空间使用new和delete操作符申请和释放连续的空间使用new[]和delete[]注意匹配起来使用。  3.2 new和delete操作自定义类型 class A { public: A(int a 0) : _a(a) { cout A(): this endl; } ~A() { cout ~A(): this endl; } private: int _a; }; int main() { // new/delete 和 malloc/free最大区别是 new/delete对于【自定义类型】除了开空间还会调用构造函数和析构函数 A* p1 (A*)malloc(sizeof(A)); A* p2 new A(1); free(p1); delete p2; // 内置类型是几乎是一样的 int* p3 (int*)malloc(sizeof(int)); // C int* p4 new int; free(p3); delete p4; A* p5 (A*)malloc(sizeof(A)*10); A* p6 new A[10]; free(p5); delete[] p6; return 0; } 注意在申请自定义类型的空间时new会调用构造函数delete会调用析构函数而malloc与free不会。 4. operator new与operator delete函数 4.1 operator new与operator delete函数重点 new和delete是用户进行动态内存申请和释放的操作符operator new 和operator delete是系统提供的全局函数new在底层调用operator new全局函数来申请空间delete在底层通过operator delete全局函数来释放空间。  /* operator new该函数实际通过malloc来申请空间当malloc申请空间成功时直接返回申请空间失败 尝试执行空 间不足应对措施如果改应对措施用户设置了则继续申请否则抛异常。 */ void *__CRTDECL operator new(size_t size) _THROW1(_STD bad_alloc) { // try to allocate size bytes void *p; while ((p malloc(size)) 0) if (_callnewh(size) 0) { // report no memory // 如果申请内存失败了这里会抛出bad_alloc 类型异常 static const std::bad_alloc nomem; _RAISE(nomem); } return (p); } /* operator delete: 该函数最终是通过free来释放空间的 */ void operator delete(void *pUserData) { _ CrtMemBlockHeader * pHead; RTCCALLBACK(_RTC_Free_hook, (pUserData, 0)); if (pUserData NULL) return; _mlock(_HEAP_LOCK); /* block other threads */ __ TRY /* get a pointer to memory block header */ pHead pHdr(pUserData); /* verify block type */ _ASSERTE(_BLOCK_TYPE_IS_VALID(pHead-nBlockUse)); _ free_dbg( pUserData, pHead-nBlockUse ); __ FINALLY _munlock(_HEAP_LOCK); /* release other threads */ __ END _ TRY _ FINALLY return; } /* free的实现 */ #define free(p) free_dbg(p, _NORMAL_BLOCK) 通过上述两个全局函数的实现知道operator new 实际也是通过malloc来申请空间如果malloc申请空间成功就直接返回否则执行用户提供的空间不足应对措施如果用户提供该措施就继续申请否则就抛异常。operator delete 最终是通过free来释放空间的。  5. new和delete的实现原理 5.1 内置类型 如果申请的是内置类型的空间new和mallocdelete和free基本类似不同的地方是new/delete申请和释放的是单个元素的空间new[]和delete[]申请的是连续空间而且new在申请空间失败时会抛异常malloc会返回NULL。 5.2 自定义类型 new的原理 1. 调用operator new函数申请空间 2. 在申请的空间上执行构造函数完成对象的构造 delete的原理 1. 在空间上执行析构函数完成对象中资源的清理工作 2. 调用operator delete函数释放对象的空间 new T[N]的原理 1. 调用operator new[]函数在operator new[]中实际调用operator new函数完成N个对象空间的申请 2. 在申请的空间上执行N次构造函数 delete[]的原理 1. 在释放的对象空间上执行N次析构函数完成N个对象中资源的清理 2. 调用operator delete[]释放空间实际在operator delete[]中调用operator delete来释放空间 6. 定位new表达式(placement-new) 了解 定位new表达式是在已分配的原始内存空间中调用构造函数初始化一个对象。使用格式 new (place_address) type或者new (place_address) type(initializer-list) place_address必须是一个指针initializer-list是类型的初始化列表使用场景 定位new表达式在实际中一般是配合内存池使用。因为内存池分配出的内存没有初始化所以如果是自定义类型的对象需要使用new的定义表达式进行显示调构造函数进行初始化。 class A { public: A(int a 0) : _a(a) { cout A(): this endl; } ~A() { cout ~A(): this endl; } private: int _a; }; // 定位new/replacement new int main() { // p1现在指向的只不过是与A对象相同大小的一段空间还不能算是一个对象因为构造函数没有执行A* p1 (A*)malloc(sizeof(A)); new(p1)A; // 注意如果A类的构造函数有参数时此处需要传参 p1-~A(); free(p1); A* p2 (A*)operator new(sizeof(A)); new(p2)A(10); p2-~A(); operator delete(p2); return 0; }
http://www.dnsts.com.cn/news/46175.html

相关文章:

  • 网站服务器租用平台装饰公司手机网站建设
  • 网站建设工具开源seo搜索优化待遇
  • 凡科建设网站怎样收录百度设计服务商
  • 网站不在首页显示出来吗WordPress添加前台注册功能
  • 网站建设全包设计需要的软件
  • zepto网站开发北京商场有哪些地方
  • 重庆出名的网站建设公司无障碍浏览网站怎么做
  • 自己建网站卖鞋网页版游戏大全
  • 网站后台表格网站首页代码模板
  • 旅游网站制作文献中山精品网站建设市场
  • 西宁网站制作哪家公司好可以做私募股权投资的网站
  • 做国外搞笑网站房屋中介网站模板
  • 个人网站怎么做app云平台网站建设
  • o2o网站建设多少钱有口碑的赣州网站建设
  • 内网网站开发费用营销方案模板范文
  • 成都推广运营公司关键词推广优化排名如何
  • 汉服网站怎么做网站套用模板
  • 如何判断网站是否被收录临淄信息港官网
  • 绍兴seo网站管理织梦招商加盟网站源码
  • 网站开发模块就业前景wp建站
  • 江苏交通建设监理协会网站微信公众平台开发外包
  • 深圳网站开发奇辰科技济南网站设计
  • 申请域名就可以做网站了吗乐平市网站建设
  • 织梦网站搬家数据库17858833595做网站
  • 网站代运营公司有哪些网站 图片水印
  • 清远网站关键词优化可以进入外国网站的浏览器
  • 网站制作职业电子商务网站建设与实践
  • 做画册好的国外网站推荐购物网站设计的意义
  • 搜狗网站录入淘客cms建站
  • 参加网站建设项目人员保障体系北京市工程建设