在C ++中为用户定义的类分配了多少内存

时间:2010-10-21 13:41:29

标签: c++ memory

据我所知,某些数据类型对象具有一定的缓冲区大小。例如。 char是1byte。 因此,在创建自定义类对象时,

  1. 分配了多少内存 对象a
  2. 是分配的内存量 如果创建对象则不同 在堆栈,或
  3. 是分配的内存量 已修复,或者已更改
  4. 创建用户定义的类实例:

    Animal a; //stack memory
    a.makeSound();
    
    Animal *a = new Animal(); //heap memory
    a->makeSound();
    

3 个答案:

答案 0 :(得分:3)

在这两种情况下,至少会分配sizeof(Animal)个字节。

在堆栈分配的情况下,可能会使用一些额外的内存进行对齐。在堆内存的情况下,一些额外的内存可能会用于存储堆服务数据。您可以通过更改类来影响确切的内存量 - 例如,对于堆分配,您可以为该类定义自定义operator new并使其分配您想要的内存量。

答案 1 :(得分:0)

  1. 表示Animal所需的内存量取决于Animal的数据成员。
  2. 堆分配比堆栈分配使用更多内存,因为堆单元存储与每个单元相关的堆相关的元信息。
  3. 在严格意义上,对象大小是固定的。但是,Animal可能包含并拥有对其他堆对象的引用。这些堆对象可以在运行时更改。

答案 2 :(得分:0)

  

分配了多少内存   对象a?

取决于Animal类的定义。

  

是分配的内存量   如果创建对象,则不同   堆栈还是堆?

没有

  

是分配的内存量   固定,还是可以改变?

根据32位或64位系统和编译器特定的实现(如填充等),分配的内存量可能会有所不同。