标题: malloc new 和space的区别 [打印本页]

作者: 51hei单片    时间: 2016-3-13 17:24
标题: malloc new 和space的区别
自己的总结如有错误,欢迎指教,谢谢!!!


malloc  

主要使用在C语言之中   在内存的堆中申请一段空间     没有赋初值    空间
里面的值是没有清零的,   使用时最好使用memset将此段空间清零。

此函数是一个指针类型的函数,返回值是一个指针指向分配的开头的位置
但是指针的类型为   void  型的,因此需要在malloc的前面加上强制的转换。

malloc 申请的空间    直接使用free释放
例如  :
int  a   ;
a = (int*)malloc (sizeof(int));
free a;

new  

主要使用在C++语言之中   也是在堆中申请一段空间    不同的就是   在C++
语言之中,申请空间构造对象的时候,必须调用构造函数,将对象中的属性
赋初值,属性的初始值可能被赋值为零,也可能被赋值为其他的数,也可以
调用带参的构造函数。

new申请的空间不必显式的指出从new返回的指针类型,因为new知道要分配
的对象的类型。

使用new申请的空间  被调用析构函数中的delete释放
例如 :
class student
{
private:
         int  age;
         string  name;       
};
int  main()
{
        student  *s1,*s2;
         s1 = new student[100];   //构造100个对象
         s2 = new studnet ;                //构造一个对象

         delete []    s1;                  //删除100个对象
         delete    s2;                        //删除一个对象
}

space

主要使用在汇编语言之中   申请的空间是在代码段    本来代码段中的值是不能改变

的但是space申请的空间中的值可以改变,并且在申请空间的时候系统自动赋值为零
而且space可以使用%替换。

没有释放的的函数    也不需要释放

例如 :
dataspace    space     100    //申请100个数据空间










欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1