使用动态变量获取结构的大小?

时间:2013-11-16 08:13:51

标签: c++

我有一个带动态数组的结构:

struct test{int* arr;};

在为arr数组(arr=new int[100])分配空间后,使用sizeof返回4个字节,这是没有数组元素的结构的大小。还有另一个内置函数,如sizeof,可以在保持动态分配空间的同时返回大小吗?或者我自己必须这样做?

+

我需要这个,因为我想更容易将结构的内容保存/加载到文件中。

2 个答案:

答案 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(); 
相关问题