jjzjj

windows - 系统如何定义进程获得的虚拟内存部分?

如果是32位系统(假设是Windows),虚拟地址空间是4GB。所以CPU可以生成这个范围内的任何地址。那么一个进程不应该也能够解决这个范围内的任何地方吗?据说每个进程都有自己私有(private)的虚拟地址空间。那么系统是如何实现的呢?换句话说,CPU生成一个32位地址,然后将其转换为物理地址。现在CPU如何知道一个特定的进程只需要处理虚拟地址空间的特定部分(它的私有(private)虚拟地址空间)。假设一个进程在其私有(private)虚拟地址空间之外寻址一个地址,会发生什么? 最佳答案 程序必须在Windows上调用Virtu

c++ - 未处理的异常 Microsoft C++ 异常:cv::Exception at memory location

我刚开始使用OpenCV。我下载了OpenCV2.4.9,并安装了MSVS2010。我的Windows是X64。我遵循了以下步骤:一个。在ConfigurationProperties下,单击Debugging->Environment并复制粘贴:PATH=C:\opencv\build\x86\vc10\binVC++目录->包含目录并添加条目:C:\opencv\build\includeVC++目录->库目录并添加条目:C:\opencv\build\x86\vc10\libLinker->Input->AdditionalDependencies并添加以下内容:opencv_c

c - 为什么我的结构元素带有填充字节?

我对结构元素的内存对齐有一个令人困惑的行为。考虑这两种结构:typedefstructs_inner{unsignedlongul1;doubledbl1;fourth_structs4;unsignedlongul2;inti1;}t_inner;typedefstructs_outer{other_structmember1;/*4-bytealigned,40bytesintermsofsizeof()*/unsignedlongmember2;t_innermember3;/*seeabove*/}t_outer;当我检查t_outer的内存布局时,我可以看到member1的元

c - 为什么内存对齐会在结构内发生变化?

在previousquestion中,我learned当一个具有8字节对齐的结构嵌入另一个具有4字节对齐的结构时,需要在8字节对齐的结构之前进行填充。明白了。至少我认为我理解了。VS2012docs说:Forstructures,unions,andarrays,thealignment-requirementisthelargestalignment-requirementofitsmembers.所以,如果我有这样的结构:typedefstructs_inner{unsignedlongul1;doubledbl1;fourth_structs4;unsignedlongul2;i

windows - 如何为每个 Windows 操作系统和我的应用程序拆分 RAM?

我想将PC中的RAM分成两部分;一半用于我的Windows操作系统,另一半用于我的应用程序的图像缓冲区。例如,我的桌面有32GB内存,我想为Windows分配16GB,并为我的应用程序访问分配另外16GB。Windows不会触及其他16GB,但我的应用程序应使用该16GB图像缓冲区。我知道如何在Linux中执行此操作,但我需要在Windows操作系统中执行此操作。我想我必须配置BIOS并需要为我的应用程序访问实现图像缓冲区的页面重映射Windows驱动程序。有什么好的方法吗? 最佳答案 您可以使用AddressWindowingEx

windows - 内存相关术语的含义?

在delphi中玩内存分析时,虽然它适用于任何语言,但我发现了一些关于已用内存的术语,但我并不完全理解。有人可以解释(或引用好的文档或手册)以下术语的含义吗?工作集大小使用的页面文件坚定的内存未提交的内存私有(private)使用(来自PROCESS_MEMORY_COUNTERS_EX结构)分页池非分页池总地址空间(来自delphi内存管理器中的THeapStatus)TotalAllocated(来自delphi内存管理器中的THeapStatus)msdn有一个briefdescriptionofeachfield但它们含义的复杂性超出了我的范围。比如,每个部分什么时候增长?它们

c++ - 在Windows中初始化静态全局变量时new返回NULL?

我正在努力将rLog与我们的代码库集成,我注意到Windows上存在一个在Linux上没有的问题。在头文件中,我有一个静态变量,它给了我一个“详细”的日志记录channel(基本上是从调试开始的),定义如下:staticRLogChannel*rlog_verbose=DEF_CHANNEL("verbose",Log_Debug);这在Linux上没有问题,但在Windows上,应用程序一启动我就会收到错误消息。我已经在rLog库中追踪到这一行:RLogChannel*rlog::GetComponentChannel(constchar*component,constchar*pa

windows - 关于内存页保护的问题

这是我在阅读时遇到的另一个问题。首先,让我们看一些引文。LPVOIDWINAPIVirtualAlloc(__in_optLPVOIDlpAddress,__inSIZE_TdwSize,__inDWORDfdwAllocationType,__inDWORDfdwProtect);Thelastparameter,fdwProtect,indicatestheprotectionattributethatshouldbeassignedtotheregion.Theprotectionattributeassociatedwiththeregionhasnoeffectontheco

c++ - 在 Windows Mobile 中动态分配内存映射文件的大小

我正在尝试找到一种方法来为不同进程之间共享的内存映射文件动态分配内存。我的设计如下:在WindowsMobile中,我正在编写一个显示线程,它使用共享内存处理来自不同进程的显示部分。计划是创建一个等于屏幕大小的内存映射文件例如:如果屏幕大小是640X480,那么我创建一个640X480X4的BYTE数组,然后与另一个进程共享这个另一个进程更新内存中的hDC显示,然后将更新发送到显示线程以更新设备上的显示。这工作正常,但一个限制是在编译时分配内存,因为我们不能动态分配内存(http://msdn.microsoft.com/en-us/library/aa366542%28v=vs.85

c - 传递 C 字符数组并分配导致程序崩溃

我不知道错误是什么,因为这是在Windows上发生的,我不知道如何在Windows上逐步执行程序。关于为什么程序在这里崩溃的任何想法(见评论行)?我认为这可能与内存滥用有关。#defineTABLE_MAX_ROW500#defineTABLE_MAX_COL20#defineTABLE_MAX_ELT_LEN60从这里开始:foo(){chartable[TABLE_MAX_ROW][TABLE_MAX_COL][TABLE_MAX_ELT_LEN];bar(table);}传递给这个函数:bar(chartable[TABLE_MAX_ROW][TABLE_MAX_COL][TAB