- 博客(11)
- 资源 (2)
- 收藏
- 关注
原创 两个线程同时调用同一个处理函数的互斥问题
问题背景:在工作中遇到过一个问题,就是在两个线程同时调用同一个函数的时候,到底是应该在这个函数的内部什么处理上加上互斥。原因又是什么?为了调查这个问题,我决定从以下三方面调查1.线程中函数的调用2.同一个进程中的两个线程调用同一个处理函数3.两个不同进程中的两个线程调用同一个处理函数1.线程中函数的调用每个进程都会有自己的虚拟地址空间,同一个进程中的每个线程都会在这
2013-01-30 21:35:45
16390
原创 Windows 内存管理(共享段,内存映射文件,写时复制)
内存管理:背景知识:虚拟地址空间:每个进程都有自己的虚拟地址空间,对于32位的进程来说空间大小为4GB,由于虚拟地址空间的存在,一个进程中的线程是看不到其他线程的内存的。虚拟地址空间主要包含了四部分内容,其中主要的是用户模式分区和内核模式分区。用户模式分区:自己写的程序,数据,加载的动态库等都加载到这个地方。内核模式分区:线程调度,内存管理等,该部分是不可以被访
2012-12-08 14:55:18
2147
转载 用户态和核心态
用户态:Ring3运行于用户态的代码则要受到处理器的诸多检查,它们只能访问映射其地址空间的页表项中规定的在用户态下可访问页面的虚拟地址,且只能对任务状态段(TSS)中I/O许可位图(I/O Permission Bitmap)中规定的可访问端口进行直接访问。核心态:Ring0 在处理器的存储保护中,核心态,或者特权态(与之相对应的是用户态),是操作系统内核所运行的模式。运行在该模式的代码,
2012-11-10 09:46:23
823
原创 dll的注入
DLL如何注入的前言:在看《Windows核心编程》的时候,希望能对一些模棱两可的知识做下笔记和调查,增强我这个屌丝的知识理解,所以写了这篇博客,有关DLL注入的。背景: 在Windows中每个进程都有自己私有的地址空间,我们不能创建一个指针来访问其他进程的内存。如果我们想让另外一个正在运行的进程调用我们写的函数的时候,由于我们的地址空间不一样,无法实现直接调用,
2012-11-10 09:39:39
499
原创 多进程 不同地址空间的数据共享问题
基础知识:进程:进程是内核分配资源的基本单位。每个进程都有自己的地址空间,其中用户区一般包括文本区,数据区,堆栈区。线程:线程是内核调度的基本单位。一个进程可以有多个线程,而且有且仅有一个主线程。这些线程都是使用进程的地址空间以及资源。所以同一个进程中的不同线程间主要是注意互斥问题。而不同进程间由于地址空间的不用,又如何共享的数据或者资源呢,又或者如何使用其他进程的数据或者资源呢?
2012-08-19 09:22:55
2177
转载 error LINK 2005
http://blog.sina.com.cn/s/blog_5db7b05a0100bek3.html今天一大早,VC就给我来了个下马威,昨天还老老实实工作着的程序,竟然出现58个错误,而且还都是类似的LNK2005!满满的一屏error,这对于初为程序员的我,那简直是致命的,心灵受的打击啊~~~ 赶紧Google,发现各位程友们也被这困扰着,不过还是有高手支招的,以下
2012-08-15 10:31:29
464
转载 Debug和Release区别
转载自http://www.cnblogs.com/JemBai/archive/2009/01/13/1374805.htmlVC下Debug和Release区别最近写代码过程中,发现 Debug 下运行正常,Release 下就会出现问题,百思不得其解,而Release 下又无法进行调试,于是只能采用printf方式逐步定位到问题所在处,才发现原来是给定的一个数组未初始化,导致
2012-08-15 09:28:02
266
原创 变量与函数的作用域
自己在写C,C++代码的时候经常会不注意变量与函数的作用域,以及他们的作用,因此在这里总结一下(从网上调查的结果)。内存中的5个区:1.全局区(静态区)2.常量区3.代码区4.栈区5.堆区变量:局部变量:存放在内存的栈区;局部变量在定义它的函数内有效,但是函数返回后失效。全局变量:存放在内存的全局数据区;整个工程文件内都有效。静态全局变量:存放在
2012-08-14 16:18:25
326
转载 fatal error C1083: 无法打开预编译头文件
fatal error C1083: Cannot open precompiled header file: 'Debug/.pch': No such file or directory1.只建了stdafx.h没有建stdafx.app2.在VS2005中页点击资源管理器中页面再点项目->属性,把stdafx.app的页面属性的c++->预编译头设为创建预编译头(/Yc),其他的ap
2012-07-22 10:00:19
2616
转载 dumpbin
vs2008没自动装dumpbin,所以得自己手动来。 1、配置环境变量path: .../Microsoft Visual Studio 2008/Microsoft Visual Studio 9.0/VC/bin ..../Microsoft Visual Studio 2008/Microsoft Visual Studio 9.0/Common7/IDE 2.运行安装
2012-07-07 07:27:26
361
转载 C++内存小问题
问题:int main(int argc, char* argv[]){int a[4]={1,2,3,4};int *ptr1=(int*)(&a+1);int *ptr2=(int*)((int)a+1);printf("%x,%x",ptr1[-1],*ptr2);return 0;}程序运行的结果是:4,2000000解答:a指向
2011-11-15 22:17:11
313
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人