繁体   English   中英

以下两种说法有什么区别? ptr = malloc (400); ptr = malloc (100 * sizeof(int))

[英]What are the difference between the following two statements? ptr = malloc (400); ptr = malloc (100 * sizeof(int))

以下两种说法有什么区别?

ptr = malloc (400);

ptr = malloc (100 * sizeof(int)) 

它是如何工作的? 它们之间有什么区别吗?

ptr 'int' 的类型

这取决于您的架构。 在 64 位机器上, int大小应为 8 字节,在 32 位机器上应为 4 字节。 虽然这不是规则,但您的 64 位编译器可能会注册为 4 个字节。

因此,不同之处在于分配的 memory 可能会根据您所针对的体系结构和编译器的决定而有所不同。

对于指针的大小也是如此。

不,不应该有。 Malloc 在运行时以字节为单位分配连续的 memory 块,所以只要 integer 占用4 个字节,就没有问题。

您也可以参考this ,以获得更清晰的信息。

另外,由于您没有提及您正在使用的指针类型..这两种方式没有区别。 假设您想要一个 integer 类型,那么这里是一个示例:

int *ptr;
ptr = malloc(100 * sizeof *ptr);

第一种形式分配 400 个字节。

第二种形式为 100 个int对象分配了足够的空间。

这些不一定是同一件事,因为int的大小可以是 2、4 或更多字节宽,具体取决于平台。

如果您需要为给定类型的N对象留出空间,请使用以下成语:

T *ptr = malloc( N * sizeof *ptr ); // for any object type T

sizeof *ptr等价于sizeof (T)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM