我正在使用Simple Scalar工具集来运行缓存关联性的一些模拟.我看到printf函数有一些奇怪的行为.这是代码片段:
printf(" Name: %s %d %d %d \n", name, nsets, cp->set_shift, cp->set_mask);
printf(" Name: %s %d %d %d \n", name, cp->set_mask, nsets, cp->set_shift);
Run Code Online (Sandbox Code Playgroud)
printf行是一个接一个,其间没有其他代码.这是输出:
Name: dl1 128 5 127
Name: dl1 127 0 128
Run Code Online (Sandbox Code Playgroud)
第二个printf的输出是错误的.第二个printf的输出应该是:
Name: dl1 127 128 5
Run Code Online (Sandbox Code Playgroud)
更改printf语句的相对顺序不会更改输出.我缺少什么部分的printf才能理解?
关于新手
去看看变量声明.我的猜测是有人是short或long不是int.由于printf无法检查您传递的有效性,因此它根据%符号决定从堆栈中抓取多少个咬合.如果你的args不同意格式,不是编译错误,但垃圾可以出来.
| 归档时间: |
|
| 查看次数: |
471 次 |
| 最近记录: |