初始化为NULL的指针数组的成员会占用内存吗?

时间:2012-02-20 14:32:52

标签: c++

我使用SDL_Surface指针,我想知道是否:

SDL_Surface* Images[8][7];

其中一些表面指针在其类构造函数中初始化为NULL,然后从未使用过,将占用的内存比单独保存的内存多。可以想象,使用枚举可以更容易地访问这些表面指针,并且不需要if或switch语句。例如,Images [0] [3]到Images [0] [7]可能都是NULL,NULL等。预先感谢回复!

编辑:“保持独立”意味着有一个指针变量名和一个较小的数组,以避免将NULL作为一些小于7的图像的值。

附录:感谢大家的闪电回复,现在我很清楚;我将继续使用我的二维数组,其他图像组也会有其他数组。

6 个答案:

答案 0 :(得分:2)

初始化为NULL的指针数组的成员会占用内存吗?

指针是一种占用足够内存来存储地址位置的类型 所以,一旦它们被声明就像占用内存的任何其他数据类型一样,它们将占用/消耗内存,而不管其变量是否被初始化。

答案 1 :(得分:2)

数组未动态分配,因此每个元素都在编译时分配了内存。但空值初始化指针并不指向额外的已分配内存。

我希望这就是你所要求的。

答案 2 :(得分:2)

初始化为NULL的指针使用内存,但只使用指针所需的字节数。

答案 3 :(得分:2)

无论是在数组中声明指针,还是逐个声明指针,都会消耗相同数量的内存。当然,如果你可以通过单独声明它们来声明更少的指针,那么将消耗更少的空间。

所以以下两行都为3个指针保留了空间:

SDL_Surface* surfaces[3];
SDL_Surface *surface1, *surface2, *surface3;

鉴于代码示例中涉及的指针数量很少,您应该选择导致代码最易读的方法。只有当你的数组很大并且只有一小部分指针非空时,才值得关注数组中未使用指针的开销。

答案 4 :(得分:1)

空指针占用与任何其他指向数据的指针相同的空间。您将节省的是为数据对象分配的内存空间。

至于你是否应该使用枚举或其他东西 - 我主要担心的是C ++数组阵列并不理想。如果你的数组的整行或列是空的,我当然不会打扰定义它。只要保持其可读性和可维护性。

答案 5 :(得分:0)

指针只是另一种数据类型,如intdouble等,恰好具有存储内存地址的目的。通常,指针将取32或64位,具体取决于您的体系结构,但在其他硬件上可能需要更多/更少。

就像int数组占用空间一样,即使值为0,指针数组也占用空间,即使值为0也是如此。(NULL通常只表示为a 0。)


例如,假设您的体系结构/编译器使用32位int:

int array[30];

上面的代码将保留30 x 4字节= 120字节。您存储的值无关紧要。


现在让我们假设您使用的是64位计算机:

int *ptr_array[30];

无论您存储什么指针值,上述代码都将保留30 x 8字节= 240字节。

您可以将此想象为编写30个单独的指针:

int *ptr1, *ptr2, *ptr3, ..., *ptr30;

请注意,我们只讨论指针在内存中消耗的大小。通常,您将在指针指向的其他位置保留内存(非空时)。那个记忆当然会根据你分配的数量而有所不同。从这个意义上讲,将指针设为null意味着它们没有任何指向,并且可以转化为减少的内存消耗。