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

为外国企业做中文网站建设市场调查报告模板及范文

为外国企业做中文网站建设,市场调查报告模板及范文,网站制作公司杭州,那些网站可以接私活做1. 内存分布 我们定义的变量对于电脑来说也叫数据,同时电脑也会把这些数据分为不同的类型,分别是局部数据,静态数据,全局数据,常量数据和动态申请数据。 在 C 中,各类数据存储位置如下: • 局…

1. 内存分布

我们定义的变量对于电脑来说也叫数据,同时电脑也会把这些数据分为不同的类型,分别是局部数据静态数据全局数据常量数据动态申请数据

在 C++ 中,各类数据存储位置如下:

• 局部数据:存于栈区,由编译器自动分配和释放,函数结束后数据销毁。

• 静态数据(static 修饰的局部变量):存于静态存储区(全局区),程序启动时分配,结束时释放,生命周期贯穿程序运行。

• 全局数据:存于静态存储区(全局区),作用域为整个程序,程序运行期间一直存在。其中未初始化的全局变量存于BSS段,已初始化的存于数据段。

• 常量数据:存于常量区(只读数据段),不可修改,程序结束后释放。

• 动态申请数据(new/malloc分配):存于堆区,需手动释放(delete/free),生命周期由程序员控制。

在上面这张图片中,各个变量可以分为以下这些类型:

• 局部数据:localVar 、num1 、char2  、pChar3  、ptr1 、ptr2 、ptr3  ,它们在函数 Test 内部定义,作用域局限于函数内,存储在栈区,函数执行完内存自动释放。

• 静态数据:函数内 staticVar  ,以及函数外 staticGlobalVar  。staticVar 虽在函数内定义,但因 static 修饰存储在静态存储区(全局区),生命周期贯穿程序始终;staticGlobalVar 是全局静态变量,也存于静态存储区(全局区)

• 全局数据:globalVar  ,在函数外部定义,作用域为整个程序,存于静态存储区(全局区)

• 常量数据:pChar3 指向的字符串 "abcd"  ,字符串常量存于常量区(只读数据段),内容不可修改。

• 动态申请数据:ptr1 、ptr2 、ptr3  指向的内存空间 ,分别通过 malloc 、calloc 、realloc 函数在堆区动态分配内存,需手动调用 free 释放。

2. C语言中动态内存管理方式:malloc/calloc/realloc/free

• malloc:从堆上分配指定字节数的连续内存空间,不对内存进行初始化 ,分配的内存中可能是垃圾值。例如 int *p = (int*)malloc(10 * sizeof(int)); 是分配能存放10个 int 类型数据的空间。

• calloc:在堆上分配指定数量、指定大小的内存空间,并且会将分配的内存空间全部初始化为0。如 int *q = (int*)calloc(5, sizeof(int)); 是分配5个 int 类型数据的空间并清零。

• realloc:用于调整已分配内存块的大小。可以扩大或缩小之前由 malloc、calloc 或 realloc 分配的内存块。若扩大内存,原内存内容会复制到新区域,新扩展部分值不确定;若缩小内存,原内存超出新大小部分会被截断。例如 int *r = (int*)realloc(p, 20 * sizeof(int)); 尝试将 p 指向的内存块大小调整为能存放20个 int 类型数据 。
简单来说就是malloc和calloc都是开辟空间用的,区别是malloc不初始化,calloc初始化为0。

cealloc用于调整已经分配好的大小。

PS:虽然calloc会初始化,但是我们在使用的时候跟多的会使用malloc,因为比较方便。

free的话就是释放开辟的内存。

我们知道程序结束的时候使用未释放的内存会自动释放,那么我们为什么还要自己通过free来进行释放呢?这是因为很多大型的程序是长期开着的,所以如果我们每个进程都有一小段内存不释放的话,那整个程序就会越来越卡,所以说我们在一开始就要养成自己free的好习惯,当然后期我们会接触到一个叫智能指针的东西,通过编译器自己调用来释放资源。

3. c++内存管理方式:new/delete

C++通过newdelete操作符进行动态内存管理。

我们知道C++这门语言底层是通过C语言来进行的。所以我们的new和delete的底层实现也是malloc和free。

我们来看下面这个代码,这是使用new和delete的格式。

#include <iostream>
using namespace std;class A {...
};class B {...
};int main() {// 使用 new 创建单个对象A* ptrA = new A();  B* ptrB = new B();  // 使用 delete 释放单个对象delete ptrA;  delete ptrB;  // 使用 new 创建数组对象A* arrA = new A[3];  B* arrB = new B[2];  // 使用 delete[] 释放数组对象(注意 [])delete[] arrA;  delete[] arrB;  return 0;
}

PS1:申请和释放单个元素的空间,使用new和delete操作符,申请和释放连续的空间,使用new[]和delete[],注意:匹配起来使用。

PS2:new如果失败的话编译器会抛异常的,所以我们也需要接收异常。

我个人认为new和delete的出现是为了类,因为我们如果使用malloc和free来对类进行创建和销毁的话,会比较麻烦。

4. C++与C语言内存管理之间的差异

共同点:就是都是从堆上开辟空间并且都需要手动释放内存。

不同点:1. 就是C语言那套叫函数,而C++那套叫操作符(即operator new和operator delete)。

               2.  C语言那套要自己手动计算空间,C++那套不需要(如果是数组的话就只需要加个数)。

               3.申请自定义类型对象时,malloc/free只会开辟空间,不会调用构造函数与析构函数,而new在申请空间后会调用构造函数完成对象的初始化,delete在释放空间前会调用析构函数完成空间中资源的清理。

               4.C语言那套申请空间失败时,返回的是NULL,因此使用时必须判空,C++那套不需要,但要捕获异常。

                5. malloc申请的空间不会初始化,new可以初始化。

                6. new后面跟的是类型,所以不用强转。 C语言那套在void* 的情况下需要强转。

5. 内存泄露

内存泄露分为两种,一种是堆内存泄漏,一种是系统资源泄漏

堆内存泄漏(Heap leak)

堆内存指的是程序执行中依据须要分配通过malloc / calloc / realloc / new等从堆中分配的一块内存,用完后必须通过调用相应的 free或者delete 删掉。假设程序的设计错误导致这部分内存没有被释放,那么以后这部分空间将无法再被使用,就会产生Heap Leak

系统资源泄漏

指程序使用系统分配的资源,如套接字、文件描述符、管道等没有使用对应的函数释放掉,导致系统资源的浪费,严重可导致系统效能减少,系统执行不稳定。

内存泄露这个问题是非常麻烦的,所以我们在平常写代码的时候是一定要注意的,严重是可以造成巨大损失的,如服务器崩溃之类的。

PS:其实如果是一次泄露很多是比较好发现的,就怕一次泄露一点点。因为这一点点实在是太小了,非常难发现,但是系统运行时间长了就一定会出问题。

http://www.dtcms.com/wzjs/96400.html

相关文章:

  • 广东省建设交通委员会网站百度怎么发布自己的广告
  • 网站开发公司排行网络推广常见的方法
  • 轻量应用服务器可以做网站吗百度推广账号出售
  • 昆明做网站哪家好大数据营销推广精准粉
  • 北京pk10盘制作网站建设站长之家 seo查询
  • 怎么做网站小编河南网站建设优化技术
  • 网站建设截图百度广告投放价格表
  • 怎么分享网站上海全网营销推广
  • 企业网站建设的推广方式seo网站优化优化排名
  • wordpress文章产品网站怎么seo关键词排名优化推广
  • 太原本地网站百度网络推广
  • 如何登录wordpress泰州seo外包
  • 宁夏网站建设优化bt蚂蚁磁力搜索天堂
  • 义乌网红直播基地网站优化公司哪家好
  • 自己独立服务器网站建设免费建站的平台
  • 深圳家装贵港seo关键词整站优化
  • 信阳网站建设制作公司南昌seo顾问
  • 建站工具论坛运营培训班有用吗
  • 个体营业执照网站如何seo推广
  • 图书馆网站结构怎么做怎么做网站推广
  • 家具能在什么网站上做sem竞价外包公司
  • 扬州做网站seo百度快速排名软件
  • 做网购网站有哪些问题新闻稿发布软文平台
  • 专做餐饮的网站自己建网站需要钱吗
  • 天津站建站时间如何利用互联网进行宣传推广
  • 网站后门清除百度网络营销app下载
  • 常见的网站建设类型都有哪些方面百度后台管理
  • 有网站想修改里面的内容怎么做安徽网站推广优化
  • 西安做网站建设的百度seo外包
  • 郑州本地网站免费网站可以下载