
基础知识
文章平均质量分 68
kiki商
这个作者很懒,什么都没留下…
展开
-
使用c++11 + 来优化常见的printf 和sprintf 操作
//https://docs.microsoft.com/en-us/archive/msdn-magazine/2015/march/windows-with-c-using-printf-with-modern-cinline void Print(char const * const value) noexcept{ Print("%s", value);}inline void Print(wchar_t const * const value) noexcept{ Print...原创 2022-01-23 19:24:39 · 812 阅读 · 0 评论 -
2020 pure c++大会视频和ppt(转载)
特别推荐,喜欢cpp 的,一定看看2020 pure c++大会视频和ppt编辑时间:2021-01-12 17:42:41作者:qicosmos2条评论2020 pure c++大会视频和pptJon Kalb C++ Today: The Beast is Back 【视频】【PPT】Michael Wong C++20 features and future direction 应嘉宾要求ppt只对参会观众开放李颖欣 超百亿请求背后的高性能服务器引擎:搜狗C++...转载 2021-01-16 15:46:06 · 638 阅读 · 0 评论 -
vs_rtti_类型识别的一些细节
#include <typeinfo>#include <iostream>class Person {public: virtual ~Person() {}};class Employee : public Person { };int main(){ Person person; Employee employee; Person* ptr = &employee; Person& ref = employee; std::c.原创 2020-08-19 15:49:45 · 486 阅读 · 0 评论 -
c++程序从开发到执行是,代码+编译器++cpu到实际执行的过程
最近读深度探索c++ 对象模型,一个深刻的体会就是c++ 代码到可执行文件,有漫长的过程,其中编译器为了我们做了太多的事情,尤其是当代c++ 11、c++ 14等等, 预编译,const expr 等等特性,编译器在其中承担了特别重要的角色c++ 从源码到可执行文件大概有编译+链接编译大概 = 预处理、预编译、词法分析、语法分析、语意分析、生成obj 文件链接大概是个寻找自己所需的东西的一个匹配的过程。这个过程里面,预处理、预编译,大有文章可做,比如,最最简单的宏展开,比如qt 里面的,预处理之原创 2020-08-19 11:01:30 · 536 阅读 · 0 评论 -
std::unique_ptr 阅读笔记
demo:#include<memory>#include<windows.h>const wchar_t* const FILE_PATH = LR"(D:\temp\test.txt)";#pragma optimize("",off)struct HANDLEDeleter{ void operator()(HANDLE hHandle)const...原创 2020-05-02 23:34:02 · 565 阅读 · 0 评论 -
c++ smart_ptr(vs2019 c++ 17) learn 2
#include <memory>#include <iostream>#include <cstdio>#pragma optimize("",off)char* g_temp_test_valid = nullptr;std::shared_ptr<char[]> getMem() { std::shared_ptr<char...原创 2020-04-05 21:06:04 · 595 阅读 · 1 评论 -
windows的writeprivateprofilestring和getprivateprofilestring系列函数,是多进程、多线程安全的
参考资料:wsr,win2k源码,实例验证原创 2019-12-10 19:01:21 · 914 阅读 · 1 评论 -
Global系列内存管理函数
MSDN 介绍:Global 函数相比于其它的内存分配函数来说有更大的开销,同时其提供了更少的功能。更建议使用heap 系列的函数进行内存管理。另外,当前Global*** 函数的主要应用场景为:DDE(动态数据交换),剪贴板,OLE 数据对象。其它情况下还是使用Heap 系列的内存管理函数比较好。如果想执行动态生成的代码,需要使用VirtualAlloc 申请内存,然后VirtualProtec...原创 2017-06-26 20:33:58 · 577 阅读 · 0 评论 -
多处理器、NUMA 支持,Thread Ordering Service(线程排序服务)?
具有多处理器的计算器通常有两种体系结构:非统一内存访问(NUMA)或对称多处理(SMP)。在NUMA 计算机中,每个处理器比其他处理器更靠近内存的某些部分,使得内存的某些部分的内存访问速度比其他部分更快。在NUMA 模型下,系统尝试在接近正在使用的内存的处理器上调度线程。SMP 计算机中,两个或多个相同的处理器或核心链接到单个共享主存储器。在SMP 模型下,可以将任何线程分配给任何处理器。因此...翻译 2018-11-18 22:49:25 · 1452 阅读 · 0 评论 -
多线程,创建线程、线程栈大小、线程句柄和标识符(TID)、暂停线程执行
https://docs.microsoft.com/en-us/windows/desktop/procthread/multiple-threads一个线程是一个进程内的可以被调度执行的实体。一个进程内所有的线程共享它的虚拟地址空间和系统资源。每个进程都开始于一个单线程,但它可以从任何它的线程中创建一个额外的线程。创建线程 CreateThread 函数为一个进程创建一个...翻译 2018-11-19 01:04:27 · 799 阅读 · 0 评论 -
加载应用程序(ShellExecute,ShellExecuteEx,SHELLEXECUTEINFO)
https://docs.microsoft.com/en-us/windows/desktop/shell/launch一旦你的应用程序定位了一个文件,下一个对其进行的步骤就是对其进行某些操作。例如,你的应用程序可能想加载另外的一个应用程序,以允许用户修改该文件。如果该文件是可执行的,你的应用程序可能想简单的加载它。这个文章将讨论,如何使用ShellExecute 和 ShellExecut...翻译 2018-11-14 23:19:12 · 408 阅读 · 0 评论 -
线程池
线程池是工作线程的集合,可以代表应用程序有效地执行异步回调。线程池主要用于减少应用程序线程的数量并提供工作线程的管理。应用程序可以对工作项进行排队,将工作与可等待的句柄相关联,根据计时器自动排队,并与I / O绑定。线程池体系结构以下应用程序可以从使用线程池中受益:1. 高度并行的应用程序,可以异步分派大量小工作项(例如分布式索引搜索或网络I / O)。2. 一个创建和销毁大量线程...翻译 2018-11-21 00:13:59 · 199 阅读 · 0 评论 -
Windows with C++-----Windows 中线程和I/O 的演变
https://www.codeproject.com/Articles/11976/Win32-Thread-Pool池的概念:资源重用,因为资源的创建费时费力,可重用的话,会带来很大的资源和效率提升。上面的例子是:对于win32 线程池的封装的一个示例代码当你开始一个新的项目,是否问过自己一个问题:这个程序是否是计算密集型或I/O 密集型?这是应该的,我发现,大部分的情况下,总是它...翻译 2018-11-22 00:07:10 · 325 阅读 · 0 评论 -
多线程的同步执行、多线程和GDI 对象、线程局部存储、在线程中创建窗口、terminiate 线程、线程安全和访问权限
多线程的同步执行为了避免冲突和思索,有必要同步多线程对共享资源的访问。当需要确保以适当的顺序执行相互依赖的代码,同步也是必要的。有一些对象的句柄可以被用来进行同步,这包括:1. 控制台输入缓存2. 事件3. 互斥体4. 进程5. 信号量6. 线程7. 定时器这些对象的状态,或者是有信号,或者没信号。当调用等待函数wait functions,并传入了这些对象中的...翻译 2018-11-19 23:43:32 · 379 阅读 · 0 评论 -
子进程
创建进程https://docs.microsoft.com/en-us/windows/desktop/procthread/creating-processesCreateProcess函数创建一个新进程,该进程独立于创建进程运行。但是,为简单起见,该关系称为父子关系。 以下代码演示了如何创建进程。如果CreateProcess成功,它将返回一个PROCESS_INFORMATIO...翻译 2018-11-20 01:32:00 · 511 阅读 · 0 评论 -
The _imaging C module is not installed
http://effbot.org/zone/pil-imaging-not-installed.htm为什么PIL 显式信息“The _imaging C module is not installed”PIL 库主要包括两个部分,一系列的Python 模块,经常存储在一个PIL 子目录下,以及一个称为_imaging 的二进制扩展模块。根据平台和版本的不同,_imaging 存储在名为...翻译 2018-11-15 23:48:58 · 1313 阅读 · 1 评论 -
COM 中的多线程
COM 线程模型每一个用户界面线程都有一个或多个窗口。线程将调用它所拥有的窗口的窗口过程。对于任一窗口, 它将被创建它的线程所拥有。所以窗口过程总是在同一线程中被执行的, 而不论被处理的消息是哪个线程发出的。这样做的结果是所有的消息被同步。窗口将可以保证它能按正确的顺序获取各个消息。这样, 程序员将用不着编写线程安全的窗口过程. COM 线程与Win32 中的用户界面线程...翻译 2018-11-12 00:57:10 · 1250 阅读 · 0 评论 -
Apartments-----套间
https://docs.microsoft.com/en-us/windows/desktop/com/processes--threads--and-apartments进程、线程和套间 多线程应用程序必须避免两个线程问题,死锁,冲突。COM call control 可以帮助避免两个对象之间的调用时的死锁问题。COM 支持一些功能,这些功能被设计为,帮助进程外服务避免冲突的情况。...翻译 2018-11-13 19:19:16 · 448 阅读 · 0 评论 -
dll 加载与卸载的顺序研究
之前写过一篇DLL 加载卸载的文章,不太好,重写一下,更深入一点。两个组或者两个公司独立的开发可能用来组成同一个产品的组件,但是他们必须独立的构建、测试和提交他们的工作。组件粒度很难是正确的且与怎么对组件是最好的这样的问题无关。取而代之的是,一个组件是怎样才能对公司最好(团队不喜欢使用多个dll,且他们想自主的写一个单独的DLL,以便他们的测试人员可以对测试组件所意为的工作量感到满意)以及怎样才对一原创 2018-03-16 10:44:15 · 2591 阅读 · 0 评论 -
loadlibrary、freelibrary 以及静态链接、动态链接
A.exe->动态链接B.dll B.dll->动态链接C.dll当A.exe 卸载B.dll,C 不被卸载A.exe->动态链接B.dll B.dll->静态链接C.dll当A.exe卸载B.dll,C被卸载由此我们想到一个问题?静态链接和动态链接的区别是什么?原创 2018-03-16 16:39:43 · 904 阅读 · 0 评论 -
windows 快捷键概述(Windows Accelerators)---严格来说,应该称为键盘加速器
https://docs.microsoft.com/zh-cn/windows/desktop/menurc/about-keyboard-accelerators本文翻译介绍windows 热键,我们通常所说的热键/快捷键,微软文档中为“Keyboard Accelerators”。翻译中使用“快捷键”表示这一概念。 题外话,https://social.technet.micro...翻译 2018-07-25 19:16:55 · 1426 阅读 · 1 评论 -
8.3 路径,文件名,路径,命名空间,名称空间,最大文件长度,文件名,路径名
https://docs.microsoft.com/zh-cn/windows/desktop/FileIO/naming-a-file命名文件、路径和名称空间Windows 支持的所有的文件系统都使用文件和目录的方式来访问磁盘或者设备上的内容。开发人员应该了解,windows API 中的各种规则,约定,以及文件、目录的名称限制。 可以通过文件I/O API 访问磁盘、设备或网...翻译 2018-10-18 19:39:04 · 2532 阅读 · 0 评论 -
windows Shell 学习记录,1-------基础介绍与安全性
https://docs.microsoft.com/en-us/windows/desktop/shell/shell-entry文档仅仅做记录,赚一些积分Windows UI 给用户提供了运行应用程序、管理操作系统所需要的很大范围的对象的访问能力。其中,数量最大和最熟悉的就是我们平常所使用的驻留在电脑磁盘驱动器上的文件夹和文件夹。另外也有一些虚拟对象,允许用户执行,类似将文件发送到远程...翻译 2018-11-09 18:51:22 · 228 阅读 · 0 评论 -
COM学习记录,1-----COM 的基本概念,优缺点,适用性
COM 是什么?COM 是一个说明如何建立可动态互变组件的规范。它提供了为保证能够互操作, 客户和组件应遵循的一些标准。 COM 组件是什么:COM 组件是以Win32 动态链接库(DLLs )或可执行文件( EXEs ) 的形式发布的可执行代码组成的。遵循COM 规范编写的组件将能够满足对组件架构的所有需求。COM 组件是动态链接的。COM 使用DLL 将组件动态链接起来。但动态链接...翻译 2018-11-09 22:51:54 · 5253 阅读 · 0 评论 -
COM 学习笔记,2------引用计数,注册,类厂
引用计数AddRef 和 Release 函数当客户从组 件取 得一 个接口 时 , 此引 用计 数值 将 增 1。 当 客户 使用 完某个接口后 , 组件的引用计数值将减 1。 当引用计数值 为 0 时 , 组件 即可将自 己从内存 中删除 三个简单的原则:返回之前调用AddRef,对于那些返回接口指针的函数,在返回之前应用相应的指针调用AddRef 。这些函数包括Qu...翻译 2018-11-10 01:52:57 · 796 阅读 · 0 评论 -
com 与 智能指针,及一些细节问题
https://docs.microsoft.com/zh-cn/cpp/atl/reference/ccomptr-class?view=vs-2017https://docs.microsoft.com/zh-cn/cpp/atl/reference/ccomptr-class?view=vs-2017https://docs.microsoft.com/zh-cn/cpp/atl/r...翻译 2018-11-10 14:14:18 · 410 阅读 · 0 评论 -
进程内服务器,进程外服务器,远程服务器
EXE 中的服务器不同的进程DLL也被称作是进程中服务器, 而EXE则被称作是进程外服务器,远程服务器指的是运行于另外一个不同的机器上的进程外服务器。对于跨越进程边界的接口,我们需要考虑如下一些条件:一个进程需要能够调用另外一个进程中的函数 一个进程需要能够将数据传递给另一个进程 客户无需关心她所访问的服务器是进程内服务器还是进程外服务器本地过程调用调整对指针的...翻译 2018-11-10 22:10:38 · 976 阅读 · 0 评论 -
ATL 基本介绍
ATL 活动模板库,一系列的基于模板的C++ 类,使得开发COM 对象更加方便,它特别支持了关键的COM 功能,包括库存实现,,双接口,标准COM 枚举器接口,连接点,和ActiveX 控件。如果进行大量的ATL 编程,将有需要了解有关属性的更多信息,这是Visual C++.NET 中旨在简化COM 编程的新功能。ATL 致力于简化创建高效、灵活、轻量的控件的过程。下面示例演示Activ...翻译 2018-11-23 01:36:02 · 1426 阅读 · 0 评论 -
windows 进程和线程系列翻译
application 由一个或多个process组成。process 对简单的理解就是:一个执行的application。process 的上下文中运行着一个或多个thread。thread是操作系统分配处理器时间的最小单位。thread可以执行进程代码的任意的部分,包括,当前正在被其它thread执行的部分。job 对象允许以许多个process 为单位来进行管理。job 对象是:可命名,...翻译 2018-11-17 17:56:24 · 282 阅读 · 0 评论 -
继承与面向对象设计
继承与面向对象设计确定你的public 继承,表达的是is-a 关系举例鸟鸟会飞大部分鸟会飞一部分鸟,比如,鸵鸟,不会飞分成两类会飞不会飞这样有一个问题,可能有些程序来说,不需要区分,两种会不会飞的鸟,此时,不区分会飞的鸟和不会飞的鸟,不失为一个完美而有效的设计所有的鸟都会飞,企鹅是鸟,但是企鹅不会飞所有的鸟都有fly 的虚函数,但企鹅将其时限为...翻译 2018-12-10 00:43:06 · 210 阅读 · 0 评论 -
编码-字符集-字符编码-code page-内码-big_endia-little_endian
编码的直接感受“汉”字的不同编码的文件存储数据:编码方式16进制GBK2312BA BAunicodeFF FE 49 6Cunicode-big-endianFE FF 6C 49utf-8EF BB BF E6 B1 89Unicode、Unicode big endian和UTF-8编码的txt文件的开头会多出几个字节,分别是FF、FE...原创 2018-12-28 23:56:15 · 1284 阅读 · 0 评论 -
wpa学习(1)
这里写自定义目录标题我的学习源,请直接参见:https://randomascii.wordpress.com/2015/09/24/etw-central/wpa 是什么?Windows Performance Analyzer,windows 性能分析工具。https://docs.microsoft.com/en-us/windows-hardware/test/wpt/window...原创 2019-04-24 00:46:34 · 594 阅读 · 0 评论 -
windows path
windows path原文概述path 规范化确认目录旧版设备应用当前目录规范化分隔符评估相对组件修剪字符跳过格式化DOS to NT ,一个路径的旅程“Real" Path一个路径的生命周期插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富...翻译 2019-09-30 01:10:07 · 370 阅读 · 0 评论 -
应用层内存管理及调试的学习-----(1)
学习之前应该先搞清楚如何调试进程当前的内存信息艰难的起步(No symbols for ntdll. Cannot continue.)解决之路:进程初始时的地址空间信息的查看定制的dll 和 exe ,用于研究dll 模块的堆的使用和释放f5 键,查看进程的crt 执行之后再下断点,查看进程的地址信息继续我们的程序,此次f5 之后,应该走完了进程crt 的初始化,然后我们再下断点一定可以得到一个...原创 2019-10-05 20:43:19 · 887 阅读 · 0 评论 -
应用层内存管理及调试的学习-----(2)
0:000> !heap Heap Address NT/Segment Heap 210000 NT Heap 10000 NT Heap 20000 NT Heap0:000> g执行...原创 2019-10-05 21:33:45 · 227 阅读 · 0 评论 -
应用层内存管理及调试的学习-----(3)
既然我们想做比较靠谱的性能测试,首先要知道如何准确测量一段代码的执行时间此时,寄出了自己的windows 核心编程–7.6 有对于线程执行时间的获取的描述#include <windows.h>#include <assert.h>#include "CElapsedMicroseconds.h"static BOOL g_bInitFrequncy = Que...原创 2019-10-06 18:26:59 · 282 阅读 · 0 评论 -
应用层内存管理及调试的学习-----(4)
突然发现一个更好的内容:https://www.oracle.com/technetwork/cn/articles/servers-storage-admin/1557798_ZHShttps://blogs.oracle.com/solaris/test-harness-for-malloc-v2综合测试比较了各种内存分配算法在服务器上的应用。总的来说,还是要根据应用程序的设计、运行环境...原创 2019-10-07 22:55:06 · 207 阅读 · 0 评论 -
设计与声明
设计与声明让接口容易被使用,不易被误用用户可能犯什么错误错误类型以错误的次序传递参数可能传递无效的参数原则让类型容易被正确使用,不容易被误用:除非有好理由,否则应该尽量令你的types 行为与内置types 一致比如,一个容器,通过size()方法统一得到元素个数是最理想的方法,STL 中任何接口如果要求客户必须计得做某些事情,就是有着“不正确使用”的倾向...原创 2018-12-04 01:31:16 · 411 阅读 · 0 评论 -
实现
实现尽可能延后变量定义式的出现时间只要定义了一个变量而其类型带有一个构造函数或析构函数,那么当程序控制流到达这个变量定义式,便需要承担构造成本:当这个变量离开其作用域,便承受析构成本。即使这个变量最终并未被使用,仍然需要耗费这些成本,所以应该尽可能的避免这种情形必要时定义、延时定义好处增加程序的清晰度并改善程序效率尽量少做转型动作C++ 四种转型格式const_cast...原创 2018-12-06 00:29:17 · 266 阅读 · 0 评论 -
构造、析构、赋值运算
构造、析构、赋值运算了解C++ 默认编写并调用哪些函数如果没有声明,编译器将为C++ 类声明(编译器版本的)构造函数、一个拷贝构造函数、拷贝赋值操作符和一个析构函数,它们都是public、inline默认行为拷贝构造函数、拷贝赋值操作符单纯的将来源对象的每个非静态成员变量拷贝到目标对象内置数据类型字节拷贝非内置数据类型存在拷贝构造函数则调用,否则就执行同...原创 2018-12-02 02:35:27 · 355 阅读 · 0 评论