| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1083 人关注过本帖, 1 人收藏
标题:请教内存问题。。。谢谢
只看楼主 加入收藏
may大象
Rank: 2
等 级:论坛游民
帖 子:55
专家分:38
注 册:2013-5-30
结帖率:87.5%
收藏(1)
已结贴  问题点数:5 回复次数:17 
请教内存问题。。。谢谢
#include<stdio.h>

int main(void)
{
    char a,b,c;
    char *p=&a,*q=&b,*r=&c;
    printf("%p %p %p\n",p,q,r);
    return 0;
}
据我理解,编译器给变量(无论是哪种数据类型)分配的内存都是4字节,然后各种数据类型的变量是按照不同的字节储存的,例如int是4字节,char是1字节,那这么说char用不完编译器给它分配的内存,这样理解对吗?
搜索更多相关主题的帖子: return 编译器 
2013-08-11 09:25
awisebird_
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:82
专家分:185
注 册:2013-7-6
收藏
得分:1 
编译器给不同的变量分配的空间是不同的,int 是4个字节,char是1个字节,指向这些空间的首地址都是32位(4个字节,对32位机而言),概念不要搞混了
2013-08-11 09:31
may大象
Rank: 2
等 级:论坛游民
帖 子:55
专家分:38
注 册:2013-5-30
收藏
得分:0 
回复 2楼 awisebird_
我现在把它们搞得有点乱~~
意思是不是这样:比如说,
char a;
int b;
a占一个字节,然后编译器还要隔三个字节,再给int分配b所占用的那四个字节吗?

                             凡成大事者,各有各的方法论。
2013-08-11 09:51
love云彩
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:青藏高原
等 级:贵宾
威 望:53
帖 子:3663
专家分:11416
注 册:2012-11-17
收藏
得分:1 
又是内存问题,字节分配都不清楚,先看看这个链接
https://bbs.bccn.net/viewthread.php?tid=378639&highlight=%C4%DA%B4%E6

思考赐予新生,时间在于定义
2013-08-11 09:59
Rynax
Rank: 1
等 级:新手上路
帖 子:10
专家分:8
注 册:2013-8-8
收藏
得分:1 
这个不好说的,要看编译器实现,比如
typedef struct {
    char a,b,c;
    int d;
}STA;
那么sizeof(STA)是多少呢?
用gcc编译是8,也就是说gcc编译器会进行4字节对齐,即a,b,c一共3字节,但是分给了4字节。
下面这个就不一样了
typedef struct {
    char a,b,c;
    int d;
} __attribute__((packed)) STA;
这次sizeof的结果是7, __attribute__((packed)) 这句就是告诉gcc,我用多少就给我多少,别多给!
这样做虽然节省了1个字节,但是有个麻烦,cpu从内存取数据的时候是1次4字节的,但是int d;的1个字节跟在c后面了,也就是说要取2次才能取到int d;这无疑拖慢了你的程序,所以gcc默认情况下会给你4字节对齐。
2013-08-11 10:10
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:2 
企图对内存拍X光片是最无聊的行为

授人以渔,不授人以鱼。
2013-08-11 11:25
liangyua
Rank: 1
来 自:大连理工大学
等 级:新手上路
帖 子:11
专家分:0
注 册:2013-8-10
收藏
得分:0 
内存问题我也是很不明白啊
2013-08-11 12:15
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
如果你不知道它们在不同的机器上如何实现, 这样的无知可能恰恰会有助于保护你。(K&R)

TonyDeng: 换句话说,有时无知是好事,能夠更有效地保护你。

授人以渔,不授人以鱼。
2013-08-11 15:15
awisebird_
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:82
专家分:185
注 册:2013-7-6
收藏
得分:0 
回复 8楼 TonyDeng
对内存分配知道的越多就会越混乱吗?求解释
2013-08-11 15:21
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
以下是引用awisebird_在2013-8-11 15:21:34的发言:

对内存分配知道的越多就会越混乱吗?求解释

不同的机器有不同的行为和机制,你不会知道世界上所有的这些行为和机制,也不需要知道,因为已经有人做了(在设计语言和编译器、库等等时经过千锤百炼而做好了的),你绕过前人成果,重新接触这些东西,不会比前人做得更好,也没什么裨益,毕竟你不是要面向那一切机器和环境,很多是用不到的——除非你的任务就是干这个。其次,技术日新月异,操作系统和语言也与时俱进,过去的技术,在新时代极可能不使用,曾经如此的知识,到后来未必如此,人家有更新鮮的做法,你若还按过去的经验来,有可能弄巧反拙(诸如像指针比数组快那样过时的观念就是如此)。

有些东西是不需要知道的,有些途径是可以绕过的。正如对动物的实验一样,有些动物会聪明地绕过障碍获得食物,有些却一次又一次地碰壁,不知变通。除非你要死啃那一块骨头,否则以实现自己的目的为第一要事,条条大路通罗马,走死一条路,那是绝路。聪明的动物都会选择走得通的路,死物如电流,也知道走向阻碍(电阻)最小的那一条路径上。

[ 本帖最后由 TonyDeng 于 2013-8-11 15:38 编辑 ]

授人以渔,不授人以鱼。
2013-08-11 15:32
快速回复:请教内存问题。。。谢谢
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.068604 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved