我有一个带动态数组的结构:
struct test{int* arr;};
在为arr
数组(arr=new int[100]
)分配空间后,使用sizeof
返回4个字节,这是没有数组元素的结构的大小。还有另一个内置函数,如sizeof
,可以在保持动态分配空间的同时返回大小吗?或者我自己必须这样做?
+
我需要这个,因为我想更容易将结构的内容保存/加载到文件中。
答案 0 :(得分:4)
由于对象及其指向的其他对象,无法获取内存使用量,因为它不是一个定义明确的概念。
arr
块。他们都负责消耗内存吗?arr
指向堆栈。这是否算作使用记忆?malloc
可能会对请求的分配大小进行舍入,或者分配内部簿记结构。这样的影响有效吗?某些操作系统确实提供了一个工具来检索malloc
的参数(或者有时是一个四舍五入的值,因为底层系统可能真的没有用于原始参数),但在标准C和C ++中,POSIX,在一般情况下,您自己负责跟踪分配大小。
答案 1 :(得分:3)
不幸的是我认为你运气不好。 sizeof
返回的大小是指针的大小,它无法确定指向的大小(在您的情况下是动态数组)。
我建议您使用std::vector
。它有一个size()
成员函数,它返回正在使用的元素数量:
struct test {
std::vector<int> arr;
}
test x;
// ...
x.arr.size();