Lasly的专栏

Endless Silence

用户操作
[即时聊天] [发私信] [加为好友]
LaslyID:FlyLasly
67965次访问,排名1667,好友1人,关注者4人。
FlyLasly的文章
原创 28 篇
翻译 0 篇
转载 0 篇
评论 780 篇
Lasly的公告
Fly me to the moon
Let me sing among those stars
Let me see what spring is like
On Jupiter and Mars

In other words, hold my hand
In other words, baby kiss me

Fill my heart with song
Let me sing for ever more
You are all I long for
All I worship and adore

In other words, please be true
In other words, I love you
最近评论
sunny:同求一份sdk的补丁及sfc源码
sunnylqm#qq.com
感激不尽
chimpane:怎么下不来阿
insulted:不知道博主用的是什么编译器啊,我用了vc6,vc7,还有gcc,都没有在*( (int *)( p + i ) ) = a;后出现内存为:03 00 00 00 03 00 00 00,
仍然与使用memcpy( p + i , &a , 3 )的结果一样!
abcboy:Lasly大大加油阿,168的大大一个接一个走了,好可惜阿,兔的未来就靠你啦~
lionwonder:请问这个GB测试版如何存档啊?
没法存档,很郁闷啊
文章分类
收藏
    相册
    存档
    软件项目交易
    订阅我的博客
    XML聚合  FeedSky
    订阅到鲜果
    订阅到Google
    订阅到抓虾
    订阅到BlogLines
    订阅到Yahoo
    订阅到GouGou
    订阅到飞鸽
    订阅到Rojo
    订阅到newsgator
    订阅到netvibes

    原创 内存对齐进阶收藏

    新一篇: E2上GBA模拟器的消息 | 旧一篇: xscale-gcc-vfp-3.3.tar.gz下载

    内存对齐,可能对大部分人都是新名词,对一些人可能见惯不怪,如果不清楚概念的建议先搜索一下,下面说的是一些极为特殊的情况。当然,下面的说明是基于C的,并且程序按照4字节的方式对齐

    对大部分人而言,内存对齐的问题可能就是解释struct结构体sizeof的大小问题,似乎出了在串行化的时候引起的小麻烦,其他都不成问题,不过,今天我告诉你一个关于内存对齐的故事,这个可不是个小事了。

    先看两段代码:

    char× p = new char[12];

     int a = 3;

     int i;

    很简单的声明吧?我们继续:

    for( i = 0 ; i < 12 ; i+=3)

     {

         memcpy( p + i , &a , 3 )

     }

    完成后p指向的内存空间应该是这样的:

    03 00 00 03 00 00 03 00 00 03 00 00

    看上去很完美吧,go on

     如果我这样写呢:

    for( i = 0 ; i < 12 ; i+=3)

     {

         *( (int *)( p + i ) ) = a;

     }

    看上似乎也没有什么错误,不过很可惜,这段代码没有达到你想要的目的,p指向的内存空间是这样的:

    03 00 00 00 03 00 00 00 03 00 00 00

    看出门道没有?内存对齐在强制转换的时候依然焕发出了青春,在大于指定内存地址开始的第一个4的整数倍地址开始赋值了。

    因此内存对齐影响的范围看来相当广泛,采取第二种方式写内存很容易就越界了。翻翻看你以前的程序,是不是也有些想不明白的地方是因为这些平时我们忽略的地方导致了未明的错误?

    发表于 @ 2007年06月27日 01:33:00|评论(loading...)|编辑

    新一篇: E2上GBA模拟器的消息 | 旧一篇: xscale-gcc-vfp-3.3.tar.gz下载

    评论

    #Renyi 发表于2007-06-27 18:42:33  IP: 124.161.120.*
    太有才了~配服ing code hero
    #goodluck1982 发表于2007-06-28 19:18:50  IP: 159.226.37.*
    强!
    估计发现这个一定是在经历了很头疼的bug之后........
    #insulted 发表于2008-11-04 17:17:52  IP: 117.22.50.*
    不知道博主用的是什么编译器啊,我用了vc6,vc7,还有gcc,都没有在*( (int *)( p + i ) ) = a;后出现内存为:03 00 00 00 03 00 00 00,
    仍然与使用memcpy( p + i , &a , 3 )的结果一样!
    发表评论  


    登录
    Csdn Blog version 3.1a
    Copyright © Lasly