可能重复:
C++中指针变量和引用变量之间的差异
我正在阅读Stanley Lippman撰写的"Inside the C++ Object Model"一书.令我困惑的是对象的"引用"和对象的"指针"之间的区别.我知道引用必须在声明时初始化,而指针可以留待以后初始化.但我想知道它们之间的物理实现差异.
为什么要有"参考"机制; 它不是重叠指针的功能?在什么情况下我们应该使用指针以外的参考?非常感谢.
我正在学习COM.我发现COM DLL是基于传统的DLL基础结构构建的.当我们构建COM DLL时,我们仍然依赖传统的DLL导出方法来引导我们进入内部COM共同类.
如果COM用于二进制级别的组件重用,我认为传统的DLL可以实现相同的功能.它们都暴露了函数,它们都是二进制的,那么转向COM方法有什么意义呢?
目前,我感觉传统的DLL以" 平面 "方式公开方法,而COM DLL以" OOP "层次方式公开方法.OOP方式似乎是一种更好的方法.这可能是COM占主导地位的原因吗?
非常感谢.
我知道有3种不同的绑定上下文或加载上下文:
Load
LoadFrom
LoadNeither
Run Code Online (Sandbox Code Playgroud)
提前致谢...
---------------以下是我最近发现的一些有用的引文--------------------
理解上下文
没有解决加载器上下文及其存在的原因,没有关于Binder的文章是完整的.装载机环境通常是混乱的根源.将加载器上下文视为包含程序集的应用程序域中的逻辑存储区.根据程序集的加载方式,它们属于三个加载器上下文之一.
加载上下文简单地说,使用Assembly.Load加载的GAC,ApplicationBase或ApplicationBase下的PrivateBinPath中存在的所有程序集都将加载到Load上下文中.使用AssemblyResolve事件解析的程序集也属于此类别.
LoadFrom上下文如果您尝试通过提供ApplicationBase外部的特定路径来加载程序集,并且在Load上下文中找不到程序集,则会在LoadFrom上下文中加载程序集.
两个上下文如果您尝试使用Assembly.LoadFile(),Assembly.Load(byte [])或Reflection.Emit加载程序集,那些程序集将加载到Neither上下文中.
在将程序集加载到LoadFrom上下文中的情况下,Binder首先检查Load上下文中是否已存在确切的程序集(相同的标识和位置).如果是,它将丢弃LoadFrom上下文中的程序集信息,并使用Load上下文中的程序集信息.在确定它是否是同一个组件时,位置信息很重要,我们将很快介绍.在.NET Framework 1.1中,这被称为LoadFrom的第二个绑定,因为Binder用于执行两个步骤 - 首先将程序集放在LoadFrom上下文中,然后在它找到匹配的程序集标识时将其提升到Load上下文.加载上下文中的位置.
确保尽可能将程序集加载到Load上下文中.为此,程序集应该可以从AppDomain的GAC,ApplicationBase或PrivateBinPath中找到.加载到此上下文中的程序集会自动获得NGen的好处,并自动获取此上下文中存在的程序集依赖项.
将程序集加载到LoadFrom上下文中有其自身的优点 - 它允许通过指定其路径来加载ApplicationBase外部的多个程序集.
现在,让我们谈谈组件的位置,同时确定通过LoadFrom()加载的组件是否与通过Load()加载的组件相同.即使两个程序集中的类型相同,如果两个程序集是从不同的路径加载的,就加载器上下文而言,它们也不被认为是相同的.这导致在同一应用程序域中重复加载相同程序集但在不同上下文(Load和LoadFrom)中加载相同程序集的情况,并且在LoadFrom上下文中不允许在Load上下文中的程序集中的类型(就装配身份而言,即使它们是相同的组件也是如此).这是LoadFrom的缺点之一.此外,LoadFrom上下文中的程序集不会自动获得NGen的好处.
对于Neither上下文,除非应用程序订阅AssemblyResolve事件,否则不能绑定此上下文中的程序集.通常应该避免这种情况.
那么为什么CLR首先会有加载器上下文呢?Loader上下文有助于确保加载程序集时的加载顺序独立性.此外,它们还可以在程序集加载到不同的上下文时提供对程序集及其依赖项的隔离度量.
- 从了解CLR活页夹
我在解决方案中看到了每个项目的packages.config文件.它包含有关各种装配信息的信息.我希望NuGet会自动扫描这些packages.config并根据需要下载.但事实并非如此.我是否需要手动安装所有软件包?
根据维基百科,HTTP和WebSocket之间的唯一关系是以a形式的额外握手Upgrade HTTP request.之后,似乎浏览器和HTTP服务器将通过普通套接字在旧的C/S范例中进行通信.
所以我的问题是:
WebSocket,因为通信目标服务器的80端口?即port 80只是同义词web.今天,我重温了@ jfriend00的优秀答案.让我们总结一下我的理解.
有人能告诉我哪些代码可以被称为"重入"代码?
我在阅读一些实时操作系统时遇到过这个词.为了使代码成为"可重入"代码,必须坚持哪些学科?
当我们启动服务器应用程序时,我们总是需要指出它侦听的端口号.但这种"倾听机制"是如何在幕后实施的呢?
我目前的想象是这样的:
操作系统将端口号与某个缓冲区相关联.服务器应用程序的职责是监视此缓冲区.如果此缓冲区中没有数据,则服务器应用程序的侦听操作将仅阻止该应用程序.
当某些数据从线路到达时,操作系统将知道该数据,然后检查数据并查看它是否针对此端口号.然后它将填充相应的缓冲区.然后OS将通知被阻止的服务器应用程序,服务器应用程序将获取数据并继续运行.
问题是:
如果上述情况是正确的,那么操作系统怎么知道有来自电线的数据呢?它不能是繁忙的民意调查.它是某种基于中断的机制吗?
如果有太多数据到达且缓冲区不够大,是否会有数据丢失?
"监听端口"操作真的是阻塞操作吗?
非常感谢.
有一个ConcurrentDictionary类型用于并发读写操作.由于在我的场景中只有读操作,我想知道是否可以使用字典?
顺便说一下,ConcurrentDictionary如何通过多个线程为R/W服务?是否隐式使用某种锁来使所有R/W操作序列化?
我对这三个概念感到困惑.
我的理解是,Serial Port通常意味着RS-232兼容端口(RS =推荐标准).USB代表Universal Serial Bus.所以它的名字包含串口,是否支持RS-232?什么Universal意思?
COM端口是什么意思?
汉斯回答的一些理解:
为了减少工作量,设备制造商通常也会使其设备的行为类似于串行端口设备.这依赖于许多操作系统和语言库已经包含串行端口通信支持的事实.虽然这种支持无法与真正匹配的设备驱动程序相媲美.
关于Serial Port HOW-TO的一个很好的参考文档.
顺便说一下,Linux Document Project非常有用.
我正在阅读Michele Leroux Bustamante撰写的<学习WCF>.在本书中,当谈到net.tcp协议时,作者只是说TCP.那么net.tcp和着名的TCP协议之间的区别是什么?
和net.msmq,net.pipe一样,净前缀是什么意思?
非常感谢.