指令cache和数据cache的问题?

wwangzhihang100 2009-09-02 08:50:58
例如

void main(void)
{
int x[5];
int i;
for (i=0; i<5; i++)
{
x[i] = i;
printf("%4d\n", x[i]);
}
}

这段代码哪些属于指令?哪些属于数据?
哪些放到指令cache中,哪些放到数据cache中?
...全文
731 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
jcreatorgx 2010-04-23
  • 打赏
  • 举报
回复
能否详细点?
gumbour 2009-09-05
  • 打赏
  • 举报
回复
void main(void)
{
int x[5];
int i;
for (i=0; i<5; i++)
{
x[i] = i;
printf("%4d\n", x[i]);
}
}



int x[5];
int i;
这两个局部变量运行时放在栈中,使用时会放在D-Cache中
"%4d\n"
这个常量编译放在数据段中,使用时也会加载到D-Cache中

i<5;中的5
5作为立即数是放在指令中的,使用时会加载到I-Cache中



剩余能翻译成汇编代码的都放在I-Cache中。



其实如果楼主学过汇编代码,应该知道数据段,代码段,资源段等等,通常来说,只有代码段会放入I-Cache,其余都会放入D-Cache,当然这只是一般情况,特殊情况,你可以把代码当做数据使用,也可以去把数据当做嗲吗去执行。
WFORLS 2009-09-02
  • 打赏
  • 举报
回复
偶是菜鸟,飘过学习
土豆 2009-09-02
  • 打赏
  • 举报
回复
[Quote=引用楼主 wwangzhihang100 的回复:]
例如
C/C++ codevoid main(void)
{int x[5];int i;for (i=0; i<5; i++)
{
x[i]= i;
printf("%4d\n", x[i]);
}
}
这段代码哪些属于指令?哪些属于数据?
哪些放到指令cache中,哪些放到数据cache中?
[/Quote]

main函数中的执行体当然是属于指令,在指令段里。
零时变量i和x[5]运行的时候在栈中,在可执行文件中不占用位置。
printf用的"%4d\n"应该是在全局的只读数据段中。

指令段中的内容进指令cache,数据段中的内容进数据cache,包括栈中数据。
BAYNPU 2009-09-02
  • 打赏
  • 举报
回复
用OD或IDA反汇编看看就知道哪个属于指令哪些属于数据,哪些放到指令cache中,哪些放到数据cache中。

21,459

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧