d语言的sizeof

Vla*_*lad 5 size d sizeof

import std.stdio;

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

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

Jon*_*vis 9

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

struct(T)
{
    T* ptr;
    size_t length;
}
Run Code Online (Sandbox Code Playgroud)

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

无论如何,什么sizeof是给你的大小ptrlength在一起,这将是8在32位系统和1664位系统.


rat*_*eak 7

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

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