C++空数组的应用
今天在看内存对齐计算结构体大小的时候发现一个地方和八股文讲的不一样,一个空结构体大小是1(用来在内存中标识每个对象的区别),但是一个只包括空数组的结构体大小是0(没错,就是0),其中数组名(常量)就标识结构体在内存中的位置(不懂具体原理)。
这个空数组的作用在于节省资源,不需要为该成员分配空间,如果是一个指针的话需要为指针本身分配空间。嵌入式系统中经常用到,例如可以定义一个结构体:
struct test { int num; int array[0]; }; //size : 4
这样test结构体在内存中只占4位,那么在使用中,可以用test *t = (test*)malloc(sizeof(test) + n * sizeof(int));这里n就是我们的array数组所需要的元素个数。原文还说不能在函数中定义空数组,自己去测试了一下发现可以定义,但是这个空数组没有任何作用,也不能给它分配空间。