C编程问题请教
比较下面两个结构体alpha和beta:
struct
{
char a:2;
char b:3;
}alpha;
struct
{
char a:2;
int b:3;
}beta;
这两个结构体占用的内存大小分别是alpha->1个字节,beta->8个字节!
这是为什么,还望各位指点一下!感激不尽!
第一个貌似很容易理解,就是2+3 <8 bits 而且都是char声明的,所以1个字节
第二个由于int出来了,int32需要占4个字节,而且机器可能要求int对齐,所以char一个字节后空了三个字节,来使得int对齐,总共char1+空3+int4=8bytes
字节对齐有四个重要的概念:
1.数据类型自身的对齐值:
对于char型数据,其自身对齐值为1,对于short型为2,对于int,float,double类型,其自身对齐值为4,单位字节。
2.结构体或者类的自身对齐值:其成员中自身对齐值最大的那个值。
3.指定对齐值:#pragma pack (value)时的指定对齐值value。
4.数据成员、结构体和类的有效对齐值:自身对齐值和指定对齐值中小的那个值。
在我的gcc上第二个是共4字节,这样子就是int和char共用一个int空间。这点也说明了位域的不可移植性。这个东西现在也用的特别少了
这个要看具体编译器……
请参考
http://topic.csdn.net/u/20100101/21/013dd2e5-26d7-41c2-acf8-a9d0b14783ad.html
http://blog.csdn.net/hairetz/archive/2009/04/16/4084088.aspx
你是用VC吧,主要原因是内存对齐一起的,参考我以前写的这几条。
主要原因是原则1跟原则3,导致beta的size为8.
首先,int数据要从第5个元素开始。
然后由于int占4字节,所
相关问答:
我现在要些一个fortran调用C接口的问题,但是不知道 C语言里面分配的指针怎么付给fortran,又不能在fortran立马先分配好,业务上不允许。
我写了个测试的例子。但是不行。
test.c
#include <stdio.h>
#incl ......
请问VFP中如何调用C/C++函数?
你要调用什么功能的函数?要看看VFP中有没有对应的函数,如果有就省着再调用了。如果没有,可以将C/C++函数写个DLL或FLL,然后在VFP调用即可。
十豆三 老师,怎么才能修改自己的 ......
SHIFT加F10与那个键右ctrl边上的那个键功能一样,想屏这个
但不知要怎么写那个组合键!
有没哪个大侠放一段这个的代码或写一段
http://topic.csdn.net/u/20090609/15/7dc9fb70-243f-4070-9cfd-34e48b66e6c6.html
......
本人在项目中,用ssh架构,想做成分页的效果.
以前我在页面中是,这样取得数据的
<!--进行循环遍历数据-->
<!--进行循环遍历数据-->
<%
List<Users> lof = (List) request.getAttri ......