C语言结构体占用内存的原理和影响因素,能否详细深入讲解?
- 内容介绍
- 文章标签
- 相关推荐
本文共计1278个文字,预计阅读时间需要6分钟。
前言:前几天下有个小友问了下我,关于C语言结构体占用空间的问题。感觉会对小可爱有点帮助,就先算下写一下。
struct Test{ int a; char b; int c;} test;
理论上,结构体Test中各个成员占用空间如下:- int a: 通常占用4字节- char b: 占用1字节- int c: 通常占用4字节
所以,结构体Test的总占用空间为:4 + 1 + 4=9字节。
前言
前几天有个小朋友问了我一下,关于C语言结构体占用空间的问题。觉得以后会对小可爱有点帮助,就打算先写一下。
struct Test { int a; char b; int c; } test;
理论上,结构体中的各个成员在内存中应该是连续储存的,就像数组里面的元素一样。事实上,也确实是这个样子的,不过和我们想象的有点不一样。
按照我们最初的想法,变量test所占的内存为 4 + 1 + 4 = 9。
但是我们写一个小代码验证一下发现和我们想的不一样。
它的内存为12。因为 int类型是4个字节,所以是不是各个成员的内存都是按照最大的那个设置呢?毕竟 4 * 3 = 12,我们再次实验,
如果按照我们的推测,那么内存大小应该是 8 * 3 = 24。为何是16呢?
下面我来总结一下。
总结
C语言结构体所占内存大小,其实里面涉及到C语言内存对齐,提高寻址效率的一种思想在里面。具体我就不在这里展开来说了,有兴趣的可以自己百度了解一下。
本文共计1278个文字,预计阅读时间需要6分钟。
前言:前几天下有个小友问了下我,关于C语言结构体占用空间的问题。感觉会对小可爱有点帮助,就先算下写一下。
struct Test{ int a; char b; int c;} test;
理论上,结构体Test中各个成员占用空间如下:- int a: 通常占用4字节- char b: 占用1字节- int c: 通常占用4字节
所以,结构体Test的总占用空间为:4 + 1 + 4=9字节。
前言
前几天有个小朋友问了我一下,关于C语言结构体占用空间的问题。觉得以后会对小可爱有点帮助,就打算先写一下。
struct Test { int a; char b; int c; } test;
理论上,结构体中的各个成员在内存中应该是连续储存的,就像数组里面的元素一样。事实上,也确实是这个样子的,不过和我们想象的有点不一样。
按照我们最初的想法,变量test所占的内存为 4 + 1 + 4 = 9。
但是我们写一个小代码验证一下发现和我们想的不一样。
它的内存为12。因为 int类型是4个字节,所以是不是各个成员的内存都是按照最大的那个设置呢?毕竟 4 * 3 = 12,我们再次实验,
如果按照我们的推测,那么内存大小应该是 8 * 3 = 24。为何是16呢?
下面我来总结一下。
总结
C语言结构体所占内存大小,其实里面涉及到C语言内存对齐,提高寻址效率的一种思想在里面。具体我就不在这里展开来说了,有兴趣的可以自己百度了解一下。

