游戏开发论坛

 找回密码
 立即注册
搜索
查看: 1885|回复: 3

传说局部变量是放在堆栈的,所以才快,那么……

[复制链接]

42

主题

115

帖子

141

积分

注册会员

Rank: 2

积分
141
发表于 2010-11-13 21:27:00 | 显示全部楼层 |阅读模式
把某块代码段当成存储数据的空间来用
比如,a_temp_data会被处理器放到缓存中吗?因为据传说cpu是有指令缓存的……
jmp _next
a_temp_data   dword  1
_next:

86

主题

2251

帖子

2384

积分

金牌会员

Rank: 6Rank: 6

积分
2384
QQ
发表于 2010-11-14 03:54:00 | 显示全部楼层

Re:传说局部变量是放在堆栈的,所以才快,那么……

不知道~
这个大概涉及到CPU cache机制。
局部变量快,大概是因为栈容易被cache命中的缘故。

0

主题

398

帖子

577

积分

高级会员

Rank: 4

积分
577
发表于 2010-11-16 17:41:00 | 显示全部楼层

Re:传说局部变量是放在堆栈的,所以才快,那么……

Win32下默认是不可以的,32位模式的地址是Flat模式的,按照页来区分,每个页有不同的属性,比如代码所在的页是只读+执行的,这样代码会造成内存访问错误.编译选项里可以改变默认的属性让代码页可写.一些外壳程序也会把代码页设置为可写,因为他解压/解密的代码可能马上就会执行.
另外你这种写法在早期是作为干扰破解的一种方法出现的,你可以查一下"花指令"相关的信息.

42

主题

115

帖子

141

积分

注册会员

Rank: 2

积分
141
 楼主| 发表于 2010-11-16 19:40:00 | 显示全部楼层

Re: 传说局部变量是放在堆栈的,所以才快,那么……

我只是想了解我1楼那样在代码段申明变量是否能够将这段代码放到缓存里面,因为我在某网站看到有人说把代码段当成数据存储区域来用能有效增加速度。
因为我用汇编确实能修改代码段
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-5-30 11:20

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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