C语言中,不同对象的大小真的有你所不知道的深层次秘密吗?

2026-04-19 04:412阅读0评论SEO资源
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计1070个文字,预计阅读时间需要5分钟。

C语言中,不同对象的大小真的有你所不知道的深层次秘密吗?

在C++中,对象的大小是指对象在内存中占用的字节数。以下是对您提出的问题的简要回答:

1. C++中对象的大小是多少? 对象的大小取决于它包含的数据成员的大小。例如,如果一个对象包含一个char类型的成员,它的大小是1字节;如果包含一个int类型的成员,它的大小是4字节(在大多数系统上)。对象的大小是所有成员大小之和,加上可能的填充字节,以确保内存对齐。

2. C++中函数是否占用对象的大小? 不,函数本身不是对象的一部分,因此它不会占用对象的大小。对象的大小只由其数据成员决定。

3. 空类的大小是多少? 即使是一个空类(不包含任何数据成员),它也至少占用一个字节的大小。这是为了支持虚函数表(vtable)和虚继承。

C语言中,不同对象的大小真的有你所不知道的深层次秘密吗?

4. 如果类中有虚函数,类的大小是多少? 如果类中定义了虚函数,类的大小至少会包含一个指向虚函数表的指针。这个指针的大小通常是4字节(在32位系统上)或8字节(在64位系统上),所以类的大小至少是这个值。

请注意,这些信息可能会根据不同的编译器和平台有所不同。

我们都直到char大小为1,int为4,那么C++中对象的大小是多少呢?

看三个问题:

  • C++中函数占不占对象的大小
  • 空类的大小是多少?
  • 如果类中有虚函数,类的大小是多少?

一,C++中函数占不占对象的大小

看一段代码:

可以看出,类的大小即为类的属性a的大小为4,函数并不占对象的大小。

那么这个的原因是什么呢?

原因:

这样定义的好处就是为了节省空间的大小。

假设此时类中有10个函数,类又定义了100个对象。如果每个对象都包含一个函数的大小,那么就需要占用1000个函数空间的位置,这样极大的消耗了资源。

实际上类的函数是放在代码区的,哪个对象需要调用函数,则从代码区调用,因为函数并不是对象独有属性,所以并不冲突,这样仅仅占10个函数空间位置就够了。

这样一对比,函数放在代码区节省了很多的资源,因此函数并不占用对象的大小。

至于对象放的位置,如果new的就在堆区,不然就在栈区。

二,空类的大小是多少?

看代码:

我们会发现,空类的大小变成了1,正常不应该是0吗?

这样设置的原因是因为每一个对象实例化都需要空间,这里系统默认给了一个占位符,占1字节大小

三,如果类中有虚函数,类的大小是多少?

看图片:

对比上面两种情况,空类大小为1,但是函数又不占用空间,为什么函数变为虚函数却变成了4呢?

因为当有虚函数时,编译器会给这个类加上虚函数指针 vptr(32位是4,64位是8)

此时类中有了指针,因此对象的大小就变为了4。

上面就是类中不同情况的大小。

总结

到此这篇关于你真的知道C++对象大小的文章就介绍到这了,更多相关C++对象大小内容请搜索自由互联以前的文章或继续浏览下面的相关文章希望大家以后多多支持自由互联!

本文共计1070个文字,预计阅读时间需要5分钟。

C语言中,不同对象的大小真的有你所不知道的深层次秘密吗?

在C++中,对象的大小是指对象在内存中占用的字节数。以下是对您提出的问题的简要回答:

1. C++中对象的大小是多少? 对象的大小取决于它包含的数据成员的大小。例如,如果一个对象包含一个char类型的成员,它的大小是1字节;如果包含一个int类型的成员,它的大小是4字节(在大多数系统上)。对象的大小是所有成员大小之和,加上可能的填充字节,以确保内存对齐。

2. C++中函数是否占用对象的大小? 不,函数本身不是对象的一部分,因此它不会占用对象的大小。对象的大小只由其数据成员决定。

3. 空类的大小是多少? 即使是一个空类(不包含任何数据成员),它也至少占用一个字节的大小。这是为了支持虚函数表(vtable)和虚继承。

C语言中,不同对象的大小真的有你所不知道的深层次秘密吗?

4. 如果类中有虚函数,类的大小是多少? 如果类中定义了虚函数,类的大小至少会包含一个指向虚函数表的指针。这个指针的大小通常是4字节(在32位系统上)或8字节(在64位系统上),所以类的大小至少是这个值。

请注意,这些信息可能会根据不同的编译器和平台有所不同。

我们都直到char大小为1,int为4,那么C++中对象的大小是多少呢?

看三个问题:

  • C++中函数占不占对象的大小
  • 空类的大小是多少?
  • 如果类中有虚函数,类的大小是多少?

一,C++中函数占不占对象的大小

看一段代码:

可以看出,类的大小即为类的属性a的大小为4,函数并不占对象的大小。

那么这个的原因是什么呢?

原因:

这样定义的好处就是为了节省空间的大小。

假设此时类中有10个函数,类又定义了100个对象。如果每个对象都包含一个函数的大小,那么就需要占用1000个函数空间的位置,这样极大的消耗了资源。

实际上类的函数是放在代码区的,哪个对象需要调用函数,则从代码区调用,因为函数并不是对象独有属性,所以并不冲突,这样仅仅占10个函数空间位置就够了。

这样一对比,函数放在代码区节省了很多的资源,因此函数并不占用对象的大小。

至于对象放的位置,如果new的就在堆区,不然就在栈区。

二,空类的大小是多少?

看代码:

我们会发现,空类的大小变成了1,正常不应该是0吗?

这样设置的原因是因为每一个对象实例化都需要空间,这里系统默认给了一个占位符,占1字节大小

三,如果类中有虚函数,类的大小是多少?

看图片:

对比上面两种情况,空类大小为1,但是函数又不占用空间,为什么函数变为虚函数却变成了4呢?

因为当有虚函数时,编译器会给这个类加上虚函数指针 vptr(32位是4,64位是8)

此时类中有了指针,因此对象的大小就变为了4。

上面就是类中不同情况的大小。

总结

到此这篇关于你真的知道C++对象大小的文章就介绍到这了,更多相关C++对象大小内容请搜索自由互联以前的文章或继续浏览下面的相关文章希望大家以后多多支持自由互联!