jjzjj

windows - PE 文件节名

根据这篇文章http://msdn.microsoft.com/en-us/library/ms809762.aspx?ppud=4我们可以用自定义名称命名PE部分。所以在一个PE文件中,它的创建者用他自己的名字替换了部分名称,现在,如果“.pdata”部分不再称为“.pdata”,那么我就无法通过它的名称找到它。我怎样才能找到“.pdata”? 最佳答案 正确,根据WindowsPortableExecutablespecification和其他来源,如MattPietrek的来源,部分名称是为人类制作的!通常,编译器为特定类型的

c - 这两个循环中哪个更快?

我需要遍历一组字节,搜索一个4字节的值(所有4个字节都相同)。数据的长度是可变的,这些字节可以在数据中的任何地方;我正在寻找第一个实例。我试图找到可能最快的实现,因为此逻辑在我的代码的关键部分运行。这只会在Windows下的x86和x64上运行。typedefunsignedcharByte;typedefByte*BytePtr;typedefunsignedintUInt32;typedefUInt32*UInt32Ptr;constByteMARKER_BYTE=0xAA;constUInt32MARKER=0xAAAAAAAA;UInt32nDataLength=...;Byt

c# - 我是否需要删除非托管代码中通过 Marshal.PtrToStructure 编码(marshal)的结构?

我有这个C++代码:extern"C"__declspec(dllexport)VOIDAllocateFoo(MY_DATA_STRUCTURE**foo){*foo=newMY_DATA_STRUCTURE;//dostufftofoo}然后在C#中我这样调用函数:[DllImport("MyDll.dll")]staticexternvoidAllocateFoo(outIntPtrpMyDataStruct);...MyDataStructureGetMyDataStructure(){IntPtrpData;ManagedAllocateFooDelegate(outpDat

c++ - 从 SAFEARRAY 中获取一个元素(或将其转换为长数组)

我正在尝试从VisualC++中的SAFEARRAY(作为函数的输出返回)获取元素。我以前从未使用过SAFEARRAY,所以我不知道如何处理它。我应该将SAFEARRAY转换为长数组(如何?)还是可以简单地使用SAFEARRAY中的值的索引? 最佳答案 您应该熟悉MSDN上的SafeArray文档。您可能想要做的是调用SafeArrayAccessData()获取指向安全数组的内存缓冲区的指针,然后直接迭代值。这可能是访问值的最有效方式。下面的代码假设了很多,你应该确保你理解这些假设(通过阅读安全数组文档)并且它们适用于你的特定情况

c++ - 在 Windows 上以编程方式设置堆栈大小

是否可以在WinAPI中为当前线程在运行时设置堆栈大小,如setrlimit在Linux上吗?我的意思是增加当前线程的保留堆栈大小,如果它对于当前的要求来说太小了。这是在一个可能被其他编程语言的线程调用的库中,因此它不是在编译时设置堆栈大小的选项。如果没有,关于将堆栈指针更改为动态分配的内存块的程序集蹦床之类的解决方案有什么想法吗?常见问题解答:代理线程是一个万无一失的解决方案(除非调用者线程的堆栈非常小)。然而,线程切换似乎是一个性能杀手。我需要大量堆栈用于递归或_alloca.这也是为了性能,因为堆分配很慢,特别是如果多个线程从堆并行分配(它们被相同的libc/CRT互斥锁阻塞,因

c++ - 多线程程序中映射模式的性能低于预期(4 倍加速比 8 倍)

我刚开始进行多线程编程,所以如果以下内容看起来很明显,请原谅。我正在将多线程添加到图像处理程序中,但加速并不完全符合我的预期。我目前在具有超线程(8)的4物理处理器cpu上获得了4倍的加速,所以我想知道这种加速是否是预期的。我唯一能想到的是,如果单个物理CPU的两个超线程必须共享某种内存总线,这可能有意义。作为多线程的新手,考虑到所有内存都分配在RAM中,我不太清楚这是否会被视为I/O绑定(bind)程序(我知道我的操作系统的虚拟内存管理器将决定分页从堆中输入/输出这个假设的内存量)我的机器有16Gb的RAM,以防它帮助确定分页/交换是否是一个问题。我已经使用QThreadPool和t

c++ - 更正 YUV422 到 RGB 的转换

大约一个星期以来,我一直在尝试将YUV422转换为RGB转换问题。我访问过许多不同的网站,并从每个网站获得了不同的公式。如果其他人有任何建议,我会很高兴听到他们。下面的公式给我一个图像,其中包含整体紫色或绿色色调。到目前为止,我还没有找到可以让我取回正确RGB图像的公式。我在下面包含了我所有的各种代码块。//for(inti=0;iimageData[i]=pData[i]+pData[i+2]*((1-0.299)/0.615);//m_RGB->imageData[i+1]=pData[i]-pData[i+1]*((0.114*(1-0.114))/(0.436*0.587))-

c# - 从 C++ 回调到 C# 函数的访问冲突异常/崩溃

因此,我有一个正在使用的native第3方C++代码库(.lib和.hpp文件),我曾使用它在C++/CLI中构建包装器以最终在C#中使用。从Debug模式切换到Release模式时,我遇到了一个特殊问题,因为当回调的代码返回时,我得到了一个访问冲突异常。原始hpp文件中回调函数格式的代码:typedefint(*CallbackFunction)(void*inst,constvoid*data);回调函数格式的C++/CLIWrapper代码:(稍后我会解释为什么我声明了两个)publicdelegateintManagedCallbackFunction(IntPtroInst,

c++ - 优化器错误或编程错误?

首先:我知道大多数优化错误是由于编程错误或依赖于可能根据优化设置(浮点值、多线程问题等)而改变的事实。但是,我遇到了一个很难找到的错误,并且有点不确定是否有任何方法可以在不关闭优化的情况下防止此类错误的发生。我错过了什么吗?这真的是优化器错误吗?这是一个简化的示例:structData{inta;intb;doublec;};structTest{voidoptimizeMe();Datam_data;};voidTest::optimizeMe(){Data*pData;//Notethatthispointerisnotinitialized!boolfirst=true;for(

c++ - 如何从 Windows x64 的汇编程序访问 C 数组?

我编写了一个汇编程序函数来加快图像处理的速度(图像是使用CreateDIBSection创建的)。对于Win32,汇编程序代码可以正常工作,但对于Win64,我在尝试访问我的数组数据时立即崩溃。我将相关信息放入一个结构中,我的汇编程序函数获得指向该结构的指针。结构指针被放入ebx/rbx并通过索引从结构中读取数据。知道我做错了什么吗?我将nasm与VisualStudio2008一起使用,对于Win64,我设置了“默认rel”。C++代码:structmyData{tUInt32ulParam1;void*pData;};CallMyAssemblerFunction(&myData)
12