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

电子商务网站建设的步骤一般为做微信公众号用什么网站

电子商务网站建设的步骤一般为,做微信公众号用什么网站,wordpress 评论次数,天猫优惠券网站怎么做文章目录1. c的内存管理例题2.c管理方式1.c的内置类型1.申请一个空间并初始化2.申请连续的空间并初始化3.总结2.c的自定义类型2.总结3.operator new与operator delete函数4.new和delete的实现原理1.内置类型2.自定义类型内存泄露问题delete先析构的原因编译器实现机制… 文章目录1. c的内存管理例题2.c管理方式1.c的内置类型1.申请一个空间并初始化2.申请连续的空间并初始化3.总结2.c的自定义类型2.总结3.operator new与operator delete函数4.new和delete的实现原理1.内置类型2.自定义类型内存泄露问题delete先析构的原因编译器实现机制问题5.定位new定位new的使用场景6.malloc/free与new/delete的区别1.共同点2.不同点用法角度底层原理角度1. c的内存管理例题 下面这道例题用于检测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在哪里__C__ staticGlobalVar在哪里__C__staticVar在哪里_C___ localVar在哪里___A_num1 在哪里__A__char2在哪里____ *char2在哪里___pChar3在哪里____ *pChar3在哪里____ptr1在哪里____ *ptr1在哪里____- 填空题sizeof(num1) ____; sizeof(char2) ____; strlen(char2) ____;sizeof(pChar3) ____; strlen(pChar3) ____;sizeof(ptr1) ____;*/globalvar: 是全局变量 处于静态区staticGlobalvar :是全局静态变量 处于静态区staticvar : 是局部静态变量 处于静态区localvar: 是局部变量 处于 栈num1 : 是一个局部的数组处于栈 char2 是一个字符数组 处于栈*char2 char2是一个数组名由于既不单独放在sizeof内部也没有取地址数组名作为首元素地址*char2是第一个元素而整个数组处于栈中所以 *char2处于栈pchar3: 是一个由const修饰的字符类型指针指针指向的内容不能改变 说明abcd是一个常量字符串内容不能被修改处于栈*pchar3 :由于abcd是一个常量字符串pchar3指向常量字符串*pchar3 处于常量区 ptr1 :是一个指向堆开辟空间的指针处于栈*ptr :是为堆开辟的空间 处于堆 sizeof(num1): 单独当在sizeof内部数组名代表整个数组sizeof(num1)40- sizeof(char2):单独当在sizeof内部数组名代表整个数组abcd\0,sizeof(char2)5- sizeof(pChar3):pChar3是一个指针所以sizeof(pChar3)4/8strlen(pChar3):pChar3代表首元素地址strlen为从给予的地址开始 到’\0’结束strlen(pChar3)4- sizeof(ptr1):ptr1是一个指针 sizeofptr1)4/8 2.c管理方式 1.c的内置类型 1.申请一个空间并初始化 #includeiostream using namespace std; int main() { //int*ptr1new int;//申请1个int的空间int* ptr new int(10);//申请10个int的空间并初始化为10delete ptr;//释放单个空间return 0; }2.申请连续的空间并初始化 #includeiostream using namespace std; int main() {//int* ptr new int(10);//int* ptr1 new int[10];//申请10个int的空间int* ptr new int[10] {1, 2, 3, 4};//申请10个int的空间并初始化delete []ptr;//释放连续空间return 0; }这里相当于部分初始化只初始化了前4个空间其他空间默认为0 3.总结 申请和释放单个元素的空间使用new和delete操作符申请和释放连续的空间使用new[]和delete[] 2.c的自定义类型 #includeiostream using namespace std; class A { public:A(int a 0): _a(a){cout A(): this endl;}~A(){cout ~A(): this endl;} private:int _a; };int main() {A* p (A*)malloc(sizeof(A) * 10);free(p);A* p1 new A[2];delete[]p1;return 0; }申请2个A类型的空间调用2次构造函数释放空间并调用2次析构函数虽然写入了malloc在堆开辟10个A类型空间free释放空间但是没有调用构造和析构函数 2.总结 在申请自定义类型的空间时new会调用构造函数delete会调用析构函数而malloc与free不会。 3.operator new与operator delete函数 operator new与operator delete函数是库里面提供的两个全局函数不是运算符重载 new和delete是用户进行动态内存申请和释放的操作符new在底层调用operator new全局函数来申请空间delete在底层通过operator delete全局函数来释放空间。 #include iostream using namespace std; #includeiostream using namespace std; class A { public:A(int a 0): _a(a){cout A(): this endl;}~A(){cout ~A(): this endl;} private:int _a; };int main() {//申请空间 operator new 封装 malloc//在用operator delete p1指向空间A* p1 new A;delete p1;//申请空间 operator new 封装 malloc//在用operator delete []p2指向空间A* p2 new A[10];delete []p2;return 0; }\ 4.new和delete的实现原理 1.内置类型 对于是内置类型malloc/free与new/delete功能基本一致但new/delete申请和释放的是单个元素的空间new[]和delete[]申请的是连续空间 #includeiostream using namespace std; int main() {int* p1 (int*)operator new(sizeof(int));//new失败抛异常int* p2 (int*)malloc(sizeof(int));if (p2 nullptr)//malloc失败返回空{perror(malloc fail);}return 0; }new机制与malloc也不同new申请空间失败会抛异常而malloc失败返回nullptr 2.自定义类型 #includeiostream using namespace std; class A { public:A(int a 0): _a(a){cout A(): this endl;}~A(){cout ~A(): this endl;} private:int _a; };int main() {A* p1 new A;//先创建空间在调用构造函数delete p1;//delete先调用析构函数在释放空间//-----------------------------------A* p2 new A[10];//先创建空间在调用构造函数10次delete[]p2;//delete先调用析构函数10次在释放空间return 0; }new先申请一个A的空间再调用构造函数delete先调用析构函数再释放空间new先申请10个A类型的空间再调用构造函数10次delete先调用析构函数10次再释放空间 内存泄露问题delete先析构的原因 class stack { public:stack()//构造{cout stack() endl;_a new int[4];_top 0;_capacity 4;}~stack()//析构{cout ~stack() endl;delete[] _a; _top _capacity 0;} private:int* _a;int _top;int _capacity; }; int main() {stack p;stack*p1 new stack;delete p1;return 0; }类的实例化对象生成p在栈上调用构造函数在堆上开辟了4个stack类型的数组p1是一个指针在栈上指向在堆上申请的一个stack 再调用构造函数_anew stack[4]_a再次指向在堆上申请的4个stack类型的数组 所以必须先调用析构函数在释放空间 若将delete p1改为 free(p1)会少调用析构函数直接释放stack空间 导致无法释放堆上申请的4个stack类型的数组从而导致内存泄露 编译器实现机制问题 #includeiostream using namespace std; class A { public:A(int a 0): _a(a){cout A(): this endl;}~A(){cout ~A(): this endl;} private:int _a; };int main() {A* p new A[10];//delete p;//错误//free(p);//错误delete []p;//正确return 0; }正常来说,A*pnew A[10]我们知道会调用10次构造函数但是delete [] p是怎么知道要调用10次析构函数的呢 自定义类型A的大小为4个字节申请10个A类型的数组会开辟40个字节的空间但是编译器会多开辟4个字节用于存储个数 10个数10是给delete时候用的free ( p ) / delete p 时释放的位置不对所以会报错delete[]就从当前指针p指向位置的地址往前减去4个字节取到这个值例如10通过这个值就知道调用多少次析构函数 最终指针指向释放位置从释放位置开始释放空间 5.定位new class A { public:A(int a 0): _a(a){cout A(): this endl;}~A(){cout ~A(): this endl;} private:int _a; }; int main() {A* p (A*)malloc(sizeof(A));//开好一块空间if (p nullptr){perror(malloc fail);}//定位newnew(p)A(1);//将p对象中的_a初始化为1p-~A();free(p);return 0; }对一块已有的空间进行初始化 定位new的使用场景 操作系统的堆因为给所有的地方提供所以会慢一些 以前使用malloc/new申请内存都是去操作系统的堆上申请的直接申请 为了提高效率申请内存去内存池中寻找而内存池中内存也是堆上的 如果内存池上有就直接返回如果没有就会去堆上找比如需要4个字节内存池会申请大块的内存储备到内存池中下一次来申请内存就能在内存池中找到 当在内存池中要的内存而内存池要的内存没有初始化所以需要定位new 6.malloc/free与new/delete的区别 1.共同点 都是从堆上申请空间并且需要用户手动释放 2.不同点 用法角度 1.malloc和free是函数new和delete是操作符2.malloc申请的空间不会初始化new可以初始化 3.malloc申请空间时需要手动计算空间大小并传递new只需其后跟上空间的类型即可如果是多个对象时[]指定对象个数即可4.malloc返回值为void*在使用必须强转new不需要因为new后跟的是空间类型 底层原理角度 malloc申请空间失败时返回的是NULL,因此使用时必须判空new失败会抛异常申请自定义类型对象时malloc/free只会开辟空间不会调用构造和析构函数而new申请空间后会调用构造函数完成对象的初始化delete在释放空间会调用析构函数完成空间中的资源的清理
http://www.hkea.cn/news/14299817/

相关文章:

  • 陕西省建设建设监理协会网站如何c2c网站建设
  • 社交网站的建设现状网站建设i
  • 响应式网站建设资讯全国工程信息平台
  • 做营销网站 如何让商家入驻wordpress 比较好的插件
  • 创建网站超市中小企业网站制作塞尼铁克
  • 德阳住房和城乡建设局网站网站的百度百科怎么做
  • 网站网络营销wordpress菜单种类
  • 英文网站推广天津建设网站官网
  • 免费网站建设ydwzjs公司做网站的作用
  • 企业建网站计什么科目一个wordpress两个站点
  • 网站文章更新时间一个设计网站多少钱
  • 做网站要注册公司么网站支付可以做二清
  • 建设银行海外招聘网站做排名的网站
  • 自己建设的网站有管理后台的登录怎样做旅游城市住宿网站
  • 先做个在线电影网站该怎么做hyein seo
  • 广州黄埔区网站建设苏州北京网站建设
  • 广州市住房建设局网站拼团手机网站开发
  • 广东省住房与城乡建设部网站wordpress开启多站点功
  • 关于网站开发的技术博客重庆轨道交通最新
  • 南京网站排名安卓做网站教程
  • 台州电子商务网站开发网站建站平台
  • 电子商务网站推广怎么做百度关键词排名查询接口
  • 清苑区建设局网站厦门建设银行网站首页
  • seo网站监测网站模板与网站开发
  • 我想做跑腿网站怎么做桂林两江四湖简介
  • 制作网站公司服务器租赁一年的费用中山做网站比较好
  • 学做软件和网站需要知识开发网站公司名称
  • 重庆注册公司核名在哪个网站微信公众号建立网站
  • 做网站老板不发工资我拿尾款网络公司怎么挣钱的
  • 书店网站建设上海最有名的设计公司有哪些