据我所知,某些数据类型对象具有一定的缓冲区大小。例如。 char是1byte。 因此,在创建自定义类对象时,
a
?创建用户定义的类实例:
Animal a; //stack memory
a.makeSound();
Animal *a = new Animal(); //heap memory
a->makeSound();
答案 0 :(得分:3)
在这两种情况下,至少会分配sizeof(Animal)
个字节。
在堆栈分配的情况下,可能会使用一些额外的内存进行对齐。在堆内存的情况下,一些额外的内存可能会用于存储堆服务数据。您可以通过更改类来影响确切的内存量 - 例如,对于堆分配,您可以为该类定义自定义operator new
并使其分配您想要的内存量。
答案 1 :(得分:0)
答案 2 :(得分:0)
分配了多少内存 对象a?
取决于Animal类的定义。
是分配的内存量 如果创建对象,则不同 堆栈还是堆?
没有
是分配的内存量 固定,还是可以改变?
根据32位或64位系统和编译器特定的实现(如填充等),分配的内存量可能会有所不同。