d语言的sizeof

时间:2014-06-30 15:35:42

标签: size d sizeof

import std.stdio;

void main() {
    int[] a = [1,2,3,4,5,6,7,8,9,10];
    write(a.sizeof);
}

在下面的代码中,静态数组的sizeof等于8字节。我使用x86 Windows 8,因此指针等于4个字节。 为什么我得到8字节大小的数组?

2 个答案:

答案 0 :(得分:9)

因为int[]是动态数组,而不是指针。 D中的数组不是指针。它们本质上是什么

struct(T)
{
    T* ptr;
    size_t length;
}

因此,如果你想要底层指针,你需要使用数组的ptr成员,尽管通常只有在与C / C ++代码交互时才需要(因为动态数组在C / C ++ 只是指针)。但是,length成员一直在使用,并且有助于使D中的数组比C / C ++中的数组更强大,更令人愉快。如果您想更多地了解D中的数组,那么您应该阅读this article。它详细介绍了它们,我认为这对所有D程序员来说都是必读的。

无论如何,sizeof给你的是ptrlength的大小,在32位系统上是816在64位系统上。

答案 1 :(得分:7)

动态数组(你拥有的)实际上是一个带有指针和size_t长度的结构,在你的CPU上都是4。

这允许D携带数组的长度以避免越界读写(如果启用了检查)和O(1)切片操作。