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

用eclipce做登录网站企业网站如何推广

用eclipce做登录网站,企业网站如何推广,站点查询,公司注册资金实缴政策这篇博客将会带着大家解决以下几个问题 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/28956.html

相关文章:

  • jsp做网站实例教程酒店网站制作策划
  • 做宣传用什么网站好宣城哪里做网站
  • 做网站排名多少钱WordPress 4.7漏洞
  • 海南响应式网站建设制作贵阳百度快照优化排名
  • 网站建设 佛山网站推广及seo方案
  • 汝阳网站开发合肥网站建设服务公司
  • 网站建设互联网加金属材料东莞网站建设
  • 北京开发网站垂直门户网站都有什么
  • seo蒙牛伊利企业网站专业性诊断wordpress创建配置文件 没反应
  • 自己做网站 什么软件平面设计包括什么
  • 大气网站模板下载动画设计毕业作品搞笑
  • 路桥建设网站中国能源建设集团有限公司董事长
  • 做维修注册网站wordpress 仿魔客吧
  • 学校网站开发系统的背景深圳网站建设公司哪家专业
  • 美橙网站开发seo推广方法有哪些
  • 北京建设工程教育中心网站重庆天气专业网站建设
  • .net 大型网站开发技术wordpress怎么修改模板文件
  • ftp给网站上传图片后图片的链接地址被改了access数据库做网站
  • 我想做京东网站淘宝怎么做易语言做网站客户端
  • 网站图片设置4:3网络营销的效果表现在哪几个方面
  • 一个空间做多个网站网站维护费计入什么科目
  • 域名注册服务商网站绿色食品网站模板.htm
  • html网页制作个人网站目前提供目录类搜索引擎的网站
  • 北京城市副中心投资建设公司网站国内永久免费网游
  • app开发公司职位南通优化网站价格
  • 提供模板网站制作多少钱网站 302重定向 备案
  • 内蒙古电子商务网站自己怎么建个网站
  • 网站怎么更新内容wordpress调整语言
  • 做什么软件做网站效率最好电子商务网站建设试卷.doc
  • 网站管理文档怎么写上海市工程建设协会网站