1.程序访问内存算不算调用api函数?
2.程序除了调用api函数,还有什么别的方法将指令传递给操作系统
程序访问内存算不算调用api函数?
答案:1 悬赏:30 手机版
解决时间 2021-01-29 22:37
- 提问者网友:蓝莓格格巫
- 2021-01-28 22:32
最佳答案
- 五星知识达人网友:往事埋风中
- 2021-01-28 23:22
1. 不一定,int a = 12;也访问内存了,但是肯定没有调API。int* pa = new int[1024 * 1024 * 32];在windows上肯定调用HeapAlloc,但int* pa = new int[16];却不一定调用,因为CRT自己维护了一个小堆。但你也可以把CRT看着操作系统的一部分,因而也可以算调了。
2. 可以中断,例如,在绝大部分windows平台上,_asm { int 3 }会在调试中使程序进入断点的。实际上,大部分系统调用都需要通过中断(好像是int 16)陷入操作系统内核的。很多API调用却不一定陷入内核,比如一些GDI函数,一些原子函数(如InterlockXXX)。但原子函数却不会将指令传递给操作系统,陷入内核一定向操作系统传指令。还有一些字符串处理的Win32 API,例如大小写转换,估计也不会向操作系统传什么指令的。还有一些GDI函数肯定是系统调用,比如画刷画笔之类的东西,他们是不会进入操作系统内核的,但是GDI32.dll绝对是windows的老牌组件,因此也算是给操作系统传了指令。
2. 可以中断,例如,在绝大部分windows平台上,_asm { int 3 }会在调试中使程序进入断点的。实际上,大部分系统调用都需要通过中断(好像是int 16)陷入操作系统内核的。很多API调用却不一定陷入内核,比如一些GDI函数,一些原子函数(如InterlockXXX)。但原子函数却不会将指令传递给操作系统,陷入内核一定向操作系统传指令。还有一些字符串处理的Win32 API,例如大小写转换,估计也不会向操作系统传什么指令的。还有一些GDI函数肯定是系统调用,比如画刷画笔之类的东西,他们是不会进入操作系统内核的,但是GDI32.dll绝对是windows的老牌组件,因此也算是给操作系统传了指令。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯