作为链接器输入的文件称为对象文件.链接器生成一个Image文件,该文件又被加载器用作输入.
来自" Microsoft可移植可执行文件和通用对象文件格式规范 "的模糊
RVA(相对虚拟地址).在图像文件中,将项目的地址加载到内存后,从中减去图像文件的基地址.项目的RVA几乎总是与其在磁盘上的文件位置(文件指针)不同.
在目标文件中,RVA的意义不大,因为未分配内存位置.在这种情况下,RVA将是一个部分内的地址(在本表后面描述),稍后在链接期间将重定位应用于该地址.为简单起见,编译器应该只将每个部分中的第一个RVA设置为零.
VA(虚拟地址).与RVA相同,但不删除图像文件的基址.该地址称为"VA",因为Windows为每个进程创建了一个独立的VA空间,与物理内存无关.对于几乎所有目的,VA应仅被视为地址.VA不像RVA那样可预测,因为加载程序可能无法将图像加载到其首选位置.
即使在读完这篇文章之后,我仍然没有得到它.我有很多问题.任何人都可以用实际的方式解释它.请遵守Object File&Image File所述的术语.
我所知道的就是地址
.data和.text(对于函数名称)的地址.如果我知道有什么问题,请纠正我.
编辑:
在阅读弗朗西斯给出的答案之后,我清楚了解物理地址,VA和RVA是什么以及它们之间的关系.
所有变量和方法的RVAs必须在重定位期间由链接器计算.那么,(方法/变量的RVA值)==(它从文件开头的偏移量)?一定是真的.但令人惊讶的是,它没有.为什么这样?
我用选中此PEView 上c:\WINDOWS\system32\kernel32.dll,结果发现:
.text这是dll的第一部分)..text通过.data,.rsrc直到最后一节的最后一个字节(.reloc)RVA&的FileOffset是不同的.并且第一部分的第一个字节的RVA"始终"显示为0x1000我猜:
所有,第一个(.text此处)部分之前的数据字节"不"实际加载到进程的VA空间中,这些数据字节仅用于定位和描述这些部分.它们可以被称为"元部分数据".
因为它们没有加载到VA空间的过程中.术语RVA的使用也没有意义,这就是为什么RVA == FileOffset这些字节的原因.
以来,
.text,.data,.rsrc,.reloc是这样的字节.0x00000PEView软件是从它开始的 …我很困惑,但以下线程清除了我的疑虑:
但它从硬件角度解决了查询问题.我想知道这些硬件功能如何映射到软件?
显而易见的一点是MultiProcessor(= Mutlicpu)和MultiCore之间没有区别,除了多核中所有cpus都驻留在一个芯片(die)上,而在多处理器中,所有cpus都在它们自己的芯片上并连接在一起.
因此,mutlicore /多处理器系统能够在"同一时间"执行多个进程(firefox,mediaplayer,googletalk)(不同于在单个处理器系统上切换这些进程的上下文)对吗?
如果它是正确的.到目前为止我很清楚.但是当多线程出现时会出现混乱.
MultiThreading"用于"并行处理.对?
cpu中的多线程涉及哪些元素?图?对于我来说,利用并行处理两个独立任务的能力,CPU的要求应该是什么?
当人们说线程的上下文切换时.我真的不明白.因为如果它的上下文切换线程然后它不是并行处理.线程必须"同时执行".对?
我的多线程概念是:考虑使用单个cpu的系统.当进程上下文切换到firefox时.(假设)firefox的每个选项卡都是一个线程,所有线程都严格同时执行.不像一个线程已经执行了一段时间,然后又一个线程已经采取直到上下文切换时间到达.
如果我在无法处理线程的处理器上运行多线程软件会发生什么?我的意思是cpu如何处理这样的软件?
如果到目前为止一切都很好,现在问题是多少线?它必须受硬件限制,我想?如果硬件只支持2个线程,我在我的进程中启动10个线程.cpu如何处理它?优点缺点?从软件工程的角度来看,在开发将由各种系统中的用户使用的软件时,那么我如何决定是否应该进行多线程处理?如果是这样,有多少线程?
我需要执行3个并行任务,在完成每个任务后,他们应该调用相同的函数来打印出结果.
我不明白.net为什么我们有异步调用(delegate.BeginInvoke()和delegate.EndInvoke())以及Thread类?
我有点困惑哪一个用?现在在这种特殊情况下,我应该使用Asychronous调用还是Thread类?
我正在使用C#.
我正在使用VS2008的设计师来做这件事.
例如,如果我有一个大小为500x500的Windows窗体,我向它添加了一个DataGridView(490x490).
当我运行这个程序.并且最大化表单,DataGridView仍然保持相同的大小.其余的额外空间在表格上是空白的.我希望DataGridView也占用整个窗口大小.
没有软件会这样.我不知道要改变什么以获得理想的行为.
我正在使用VS2008 C#.NET.
我在3个项目中创建了3个不同类的库.我写了一个使用这些库(dll)的应用程序.
正在发生的事情是每个项目都在编译成一个类库.所以,我有3个dll和1个exe.
相反,我希望以两种方式拥有这些:
我怎么能这样做?我在VS2008中找不到静态链接的任何选项,也请提及命令行选项.
我对实现复制和粘贴功能的原因感到困惑.这正是我所困惑的:
当我从MS Word(使用与HTML不同的标记语言)复制格式化文本并粘贴到web浏览器中的RTF编辑器(如gmail或http://www.freerichtexteditor.com/index.php?inc=demo/index)时格式保留,但现在标记转换为HTML.这怎么发生的?是什么照顾转换?
如果我将此文本粘贴到其他应用程序中,它将被转换为该格式.如果我复制了一些html页面并将其粘贴到word中,那么将会有从HTML到word的标记转换.再怎么样?
然后,如果我将这个复制的格式化文本粘贴到记事本等文本编辑器中,则所有格式都将丢失,并且标记将被删除.哪个应用程序剥离了标记并将其转换为纯文本?
当我复制格式化文本时,究竟是什么复制到剪贴板中?我是.NET C#程序员.我该怎么编程呢?
我是一名.NET程序员.我从未在MFC中开发任何东西.目前,我不得不为某些图像处理任务编写C++应用程序(控制台).我写完了.但关键是我需要为此设计GUI.好吧,不会有任何复杂的事情.只是一个窗口,有几个按钮,RadioButtons,复选框,PicturesBox和几个滑块.而已.
我正在使用VS 2008并期待一个.NET风格的表单设计器.
为了测试,我创建了一个MFC项目(具有所有默认配置),并且这些文件是默认创建的:
ChildFrm.cpp
MainFrm.cpp
mfc.cpp
mfcDoc.cpp
mfcView.cpp
stdafx.cpp
Run Code Online (Sandbox Code Playgroud)
现在,我找不到了Designer.没有视图>设计器.我打开了以上所有*.cpp并在代码编辑器中右键单击以查看"Designer View".ToolBox只是空的,因为我处于代码编辑器模式.
如何打开设计师?
我已经完成了这个问题,但没有帮助.
这里的情况不同.我正在使用Backgroundworkers.第一个backgroundworker开始操作用户的图像输入和firstbackgroundworker_runworkercompleted()我正在使用调用其他3个后台工作者
algo1backgroundworker.RunWorkerAsync();
algo2backgroundworker.RunWorkerAsync();
algo3backgroundworker.RunWorkerAsync();
Run Code Online (Sandbox Code Playgroud)
这是每个的代码:
algo1backgroundworker_DoWork()
{
Image img = this.picturebox.Image;
imgclone = img.clone();
//operate on imgclone and output it
}
algo2backgroundworker_DoWork()
{
Image img = this.picturebox.Image;
imgclone = img.clone();
//operate on imgclone and output it
}
Run Code Online (Sandbox Code Playgroud)
类似的操作在其他algo*backgrougrondworker_doWork()中完成.
现在有时我得到"InvalidOperationException - 对象目前正在其他地方使用".它很随意.我有时会在algo1backgroundworker_DoWork中获取此信息,有时在algo2backgroundworker_DoWork中,有时在Application.Run(new myWindowsForm())中获取;
我不知道发生了什么事.
在特定的应用程序中,我需要机器学习(我知道我在本科课程中学到的东西).我使用支持向量机并解决了问题.它的工作正常.
现在我需要改进系统.这里的问题是
我每周都会获得额外的培训示例.现在,系统开始使用更新的示例(旧示例+新示例)进行新的培训.我想让它增量学习.使用以前的知识(而不是前面的例子)和新的例子来获得新的模型(知识)
我的训练样例有3个班级.因此,每个训练样例都适合这三个类中的一个.我想要"未知"类的功能.任何不适合这3个类的东西都必须标记为"未知".但我不能将"未知"视为一个新类,并为此提供示例.
假设,实现了"未知"类.当类是"未知"时,应用程序的用户输入他认为该类可能的内容.现在,我需要将用户输入合并到学习中.我也不知道怎么做.如果用户输入一个新类(即一个尚未在训练集中的类),它会有什么不同吗?
我是否需要选择新算法或支持向量机可以执行此操作?
PS:我正在使用libsvm实现SVM.
我用汇编语言为x86和x86-64编程了几个月.现在,我想转向一些不同类型的处理器.
这些我发现ARM的MIPS,SPARC,PowerPC,Itanium,ARM正在被广泛使用.但是,我看到教程和书籍的书籍比其他所有架构更能讲授MIPS.
为什么MIPS如此受欢迎?MIPS处理器是否仍在使用?我应该选择哪种架构?
我的背景:
我是电子部门的学生.我也是一名高级程序员.