malloc和array之间的区别是什么



我想问一下malloc和数组。

int*x;

x=(int*)malloc(sizeof(int));

int x[4];

它们之间有什么区别?

int *xp;int xa[4];之间最重要的区别是sizeof(xp) != sizeof(xa)声明对象的大小。

可以将xa对象作为int *pparam传递给函数,但不能将xp作为int aparam[4]传递给函数。因为aparam描述了整个4int对象,而pparam描述了指向可能具有任何长度的对象的指针。

此外,xa将保留在链接程序的数据区域中,而指针malloc(sizeof(int)*4)将由运行时和堆上的系统调用分配。在调试器中检查巨大的地址差异!

嗯,有多种不同。

这会在堆上分配一个int的缓冲区。。。

int *x;
x = (int*)malloc(sizeof(int));

这会在堆栈或全局内存中分配一个由四个int组成的数组,或者如果它出现在结构或类的定义中,则可能会将其声明为结构或类中的成员。。。

int x[4];

除了分配的位置之外,第一个分配了一个int的空间,第二个分配了四个int的空间。但假设你打算这样做。。。

int *x;
x = (int*)malloc(sizeof(int) * 4);

那么在这种情况下,两个分配都是一块内存,其大小是平台上int的四倍。从使用的角度来看,你可以以几乎相同的方式使用它们;在任何一种情况下,x[0]都是第一个int,由于两者都未声明为const,因此可以以相同的方式读取或写入其中一个。

所以现在我们来了解一下分配特征的差异&两种不同的内存分配方式的寿命:

malloc()’ed的情况下,该请求的内存是在堆上分配的,它的生存期是无论你想保留多长时间,直到你对它调用free()。在另一种情况下,如果你在方法/函数中将它声明为局部变量,它的生活期是直到程序执行退出声明它的范围。如果您将它声明为全局变量,那么它的生存期就是整个应用程序的生存期。如果你把它声明为结构或类的成员变量,那么它的生存期就是它的封闭结构/类的生存期,不管它是什么

相关内容

  • 没有找到相关文章

最新更新