原创 内存对齐问题、指针与数组区别

2012-9-24 12:21 2526 12 12 分类: 软件与OS 文集: C语言深度解剖

 

  1. 内存对齐:

字、双字和四字在自然边界上不需要在内存中对齐。对字、双字和四字来说,自然边界分别是偶数地址、可以被4整除的地址和可以被8整除的地址。无论如何,为了提高程序的性能,数据结构应该尽可能地在自然边界上对齐。原因在于,为了访问未对齐的内存,处理器需要做两次内存访问;然而,对齐的内存访问仅需要一次访问。

#include <stdio.h>

struct TestStruct1

{

    char c1;

    short s;

    char c2;

    int i;

}str_a;

 

struct TestStruct2

{

    char c1;

    char c2;

    short s;

    int i;

}str_b;

 

int main(void)

{

    printf("size of str_a:%d\nsize of str_b:%d\n",sizeof(str_a),sizeof(str_b));

    while(1);

    return 0;

}

 

1.jpg

 

  1. 指针与数组:

指针就是指针,在32位系统,指针变量永远占4字节,其值为某一个内存的地址。指针可以指向任何地方,但是不是任何地方你都能通过这个指针变量访问到。

数组就是数组,其大小与元素的类型和个数有关;定义数组的时必须指定其元素的类型和个数;数组可以存任何类型的数据,但不能存函数。

指针和数组是两个完全不一样的东西。只是他们都可以“以指针的形式”或以“以下标的形式”进行访问。

 

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
12
关闭 站长推荐上一条 /3 下一条