小编404*_*und的帖子

围绕函数调用 std::thread() 的工作方式不同

这段代码有什么原因吗:

int main(int argc, char* argv[])
{

    Main::Init();
    std::thread worker(Main::Mainloop);
    worker.join();
    Main::Free();

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

应该与此处的代码不同:

int main(int argc, char* argv[])
{

    Main::Init();
    Main::Mainloop();
    Main::Free();

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

注意Main该类被定义为单例,这里是代码: main.h

#pragma once

#ifndef MAIN_H
#define MAIN_H


#include "window.h"


#include "mainloop.h"


 

class Main    ///Singleton
{
public:
    Main(const Main&) = delete;
    Main(Main&&) = delete;
    Main& operator=(const Main&) = delete;
    Main& operator=(Main&&) = delete;



private:
    Main();


    static Main& Get_Instance();


    friend int main(int argc, char* argv[]);


    static void Mainloop();
    static void Init(); …
Run Code Online (Sandbox Code Playgroud)

c++ opengl multithreading glfw imgui

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

使用相同的内存使用量在 Windows 中创建应用程序,例如记事本

我一直在玩 GLFW、OpenGL、SDL2 以及其他用于制作 GUI 和游戏的东西,但无论我做什么,实际应用程序本身都使用大约 20mb ram,显示器上什么也没有,只是一个空白程序。与此相反,与相同cmd,任务管理器中的记事本在实际程序本身运行时使用了 0.1-0.2mb 的内存?

在某种意义上与 Cmd 相同,它使用大约 0.4mb。如果使用 windows API 制作窗口的最基线库使用至少 20mb,这怎么可能?你能做些什么来制作一个程序,比如记事本,它的制作方式(即使用小于 1mb ram)。

这似乎很奇怪,因为它需要加载字体,然后是文本的纹理,仅在一个简单的 SDL2 程序中就使用至少 5mb ram 来处理我在记事本中的文本大小的纹理,更不用说 30mb 或所以 ram 它使用并释放加载字体。

我是否缺少一些在 Windows、Linux 和 mac 中制作应用程序的特殊方法,因为它们的文本编辑器也使用与记事本几乎相同的方式。

任何回应将不胜感激:)!

c c++ memory windows user-interface

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

emplace_back 比设置索引快吗?

哪个会更快?

std::vector< std::string > vec;
vec.reserve(10);
for (int i=0; i < 10; i++){
    vec.emplace_back("Some text");
}
Run Code Online (Sandbox Code Playgroud)

或者

std::vector< std::string > vec;
vec.resize(10);
for (int i=0; i < 10; i++){
    vec[i] = "Some Text";
}
Run Code Online (Sandbox Code Playgroud)

如果其中一个比另一个更快(大小为 10),哪一个更具可扩展性?

c++ optimization vector

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

为什么允许使用此代码,它是否会造成内存泄漏?

下面的代码崩溃了,但是我很困惑它是如何被允许的。

int* var = new int;
int num = 10;
var = &num;

std::cout << *var << ", " << num << std::endl;
    
delete var;
    
std::cout << "Program finished" << std::endl;
Run Code Online (Sandbox Code Playgroud)

我改变了var指向的事实是否会导致内存泄漏?如果是这样,它是否会导致无法从第 3 行开始修复的内存泄漏?如果没有,你怎么能删除这段记忆?

c++ memory pointers heap-memory

-2
推荐指数
1
解决办法
70
查看次数