小编Luc*_*raw的帖子

.Net处理非托管内存与C++运行时/二进制可执行文件不同吗?

使用p/invoke与具有大量静态数据分配的Fortran库进行交互的.Net应用程序在Windows远低于2 GB静态数据限制时无法加载库.我通过p/invoke加载成功的最大静态代码大小约为1 GB.如果我编写一个加载库的简单C程序,我可以加载最大1.9 GB的静态数据.两个测试应用程序都是32位.

托管应用程序尝试通过LoadLibrary加载库失败,并且Marshal.GetLastWin32Error返回的错误消息是"没有足够的存储空间可用于处理此命令".CLR处理非托管库的静态内存分配方式与C++运行时提供的二进制可执行文件的方式有何不同?

.net c# clr memory-management out-of-memory

3
推荐指数
1
解决办法
144
查看次数

工厂方法创建shared_ptr对象

当使用工厂创建对象时,例如在下面的示例中,在某些情况下,shared_ptr显然被返回过程中被删除的对象被删除(在调试期间,对象被创建好,但是当它被分配给this->xs异常时被抛出) .当我更改工厂方法以返回原始指针时,作为代码的Link::xs成员unique_ptr运行正常.幕后发生了什么shared_ptr导致它以这种方式行事?它与shared_ptr<CrossSection>包裹Circular物体的事实有关吗?使用MS Visual C++ 2012进行了测试.

class Link
{
private:
    std::shared_ptr<xs::CrossSection> xs;
public:
    void parseXsection(const std::vector<std::string>& parts);
    std::shared_ptr<xs::CrossSection> getXs() { return this->xs; }
};
void Link::parseXsection(const std::vector<std::string>& parts)
{
    this->xs = xs::Factory::create(parts[1]);
}

namespace xs
{
    class CrossSection
    {
    };
    class Circular : public CrossSection
    {
    };
    class Dummy : public CrossSection
    {
    };
    class Factory
    {
    public:
        static std::shared_ptr<CrossSection> create(const std::string& type);
    };
    std::shared_ptr<CrossSection> Factory::create(const std::string& …
Run Code Online (Sandbox Code Playgroud)

c++ polymorphism shared-ptr visual-c++

1
推荐指数
1
解决办法
5747
查看次数