sizeof pointer and struct

#include <stdlib.h>

struct {
    short a1;
    short a2;
    short a3;
}A;

struct {
    long a1;
    short a2;
}B;

int main() {
    char *ss1 = "0123456789";//4
    char ss2[] = "0123456789"; //11
    char ss3[100] = "0123456789";//100
    int ss4[100];//400
    char q1[] = "abc";//4
    char q2[] = "a\n";//3
    char *q3 = "a\n";//4
    int lenA = sizeof(A);//6
    int lenB = sizeof(B);//8
    char *str1 = (char*)malloc(100);//4
    void *str2 = (void*)malloc(100);//4
}

 cpu的优化规则:对于n字节的元素,首地址能被n整除。才能获取最好的性能,所以设计编译器的时候可以遵循这个规则:对于每一个变量,可以从当前位置向后找到第一个满足这个条件的地址作为首地址。

在访问内存的时候,如果地址按照四字节对齐,则访问效率会高很多,这种现象的原因在于访问的硬件电路。一般情况下,地址总线总是按照对齐后的地址来访问。比如从0x00000001开始的四字节内容,系统首先要从0x00000000读4字节,从中取得三个字节,然后在从0x00000004作为其实地址,获取下一个4字节,在从中取得第一个字节,两次组合得到想要的内容。如果地址一开始就是对齐到0x00000000则系统只需要一次读写即可。

 

posted on 2017-03-02 02:33  123_123  阅读(123)  评论(0编辑  收藏  举报