搜索
bottom↓
回复: 0

由CPU类型决定的几个特性(概念)

[复制链接]

出0入0汤圆

发表于 2015-3-18 00:21:50 | 显示全部楼层 |阅读模式
1,变量(比如定义一个整形int型的四个字节的变量int var)在内存中的存放的格式是大端的还是小端的?

比如定义一个变量int var = 1;如果CPU是32 位小端的cpu,编译器会把内存中某个地址连续的4个字节分别赋值为0x01,0x00,0x00,0x00, 那么cpu根据这个变量的地址,读取内存中的这连续的4个字节到自己的寄存器中,然后cpu的加法器把这4个字节的内容(当作数值1)进行加法运算。如果是大端cpu,编译器会赋值为0x00,0x00,0x00,0x01,然后cpu读取并用自己的加法器(当作数值1)运算。



同理,如果内存中的一个变量在地址0~3的内容分别是0x01, 0x00,0x00, 0x00,如果是小端的cpu,那么内存中的这4个字节的变量就表示数值1,因为这个值就被cpu的加法器当作1(低字节在低地址)来运算;如果是大端cpu,那么内存中的这4字节的变量就表示数值0x1 00 00 00,因为cpu的加法器把它当作值0x1 00 00 00(高字节在低地址)在来运算。



2,线程的栈是向低地址扩张还是高地址扩张?

C语言编译器会把 函数传参,中断,任务调度等编译为对应的栈操作PUSH var,cpu执行PUSH var指令,把var的内容放到SP寄存器的值所指的地址,同时SP寄存器的值自动加1或者减1(由cpu类型决定),如果cpu执行push命令时,SP寄存器的值是自增的,那么线程的栈是向高地址扩张的,如果是自减的,则线程的栈是向低地址扩张的。

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-23 07:14

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表