C/C++
文章平均质量分 66
helloworddm
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Vulkan GPU图像处理之直方图均衡化:Kompute框架实战与性能分析
再量化为 0~255 整数。原创 2026-05-10 14:21:21 · 416 阅读 · 0 评论 -
Vulkan GPU图像处理之分段线性变换:Kompute框架实战与性能分析
定义:由多段直线拼接而成的灰度变换函数,不像幂律/对数是固定曲线,可以人为自定义任意灰度映射规则,灵活解决灰度集中、动态范围不足等问题。优点:灵活、可定制;缺点:需要手动设置拐点坐标。对比度拉伸:用分段线性把狭窄灰度区间拉伸到全范围,提升对比度、去灰蒙蒙;比特平面分层:把8位灰度拆成8个比特平面,高位存轮廓、低位存细节噪声,用于压缩和隐写。原创 2026-05-05 11:16:17 · 559 阅读 · 0 评论 -
Vulkan GPU图像处理之幂律(伽马)变换:Kompute框架实战与性能分析
第3章 灰度变换与空间滤波 → 3.2 基本灰度变换 → 3.2.3 幂律(伽马)变换幂律变换(Power‑Law Transformation)、伽马变换(Gamma Transformation)原创 2026-04-26 12:52:24 · 559 阅读 · 0 评论 -
Vulkan GPU图像处理之对数变换:Kompute框架实战与性能分析
本质仍是灰度变换,分别对 R/G/B 三通道做对数变换即可。更多内容,欢迎关注我的微信公众号: 半夏之夜的无情剑客。原创 2026-04-18 13:02:27 · 402 阅读 · 0 评论 -
Vulkan管线
所有着色器(红色框)都可以通过。原创 2026-03-08 12:29:15 · 594 阅读 · 0 评论 -
vulkan nbody程序运行
【代码】vulkan nbody程序运行。原创 2026-03-08 11:03:54 · 105 阅读 · 0 评论 -
明明 DLL 就在眼前,却说找不到?
最终可确定是BOOST_PYTHON38-VC142-MT-X64-1_78.DLL和BOOST_NUMPY38-VC142-MT-X64-1_78.DLL,这很可能是版本不一致导致的。中介绍了ctypes的使用。但有些时候会出现特定dll找不带的情况,这个时候通常很棘手。一时很难定位到底缺少了哪一个dll。更多内容,欢迎关注我的微信公众号: 半夏之夜的无情剑客。相应的dll明明是存在的呀?直接将dll拖入到软件中即可,运行结果如下图所示,而图中下半部分是系统自带的,r这是为此而诞生的。原创 2026-03-03 18:05:46 · 813 阅读 · 0 评论 -
C++与C#交互 回调封装为await
【代码】C++与C#交互 回调封装为await。原创 2025-12-18 17:37:52 · 363 阅读 · 0 评论 -
WinUI3 主线程不要执行耗时操作的原因
主线程是UI应用程序的核心,负责协调所有与用户交互相关的操作。执行耗时操作会阻塞主线程的消息循环,导致UI无响应、布局异常,甚至程序崩溃。因此,任何可能耗时的操作都应该在后台线程执行,只有UI更新才应该在主线程上进行。主线程被阻塞时,无法处理新的UI更新请求和用户输入事件,导致界面卡顿甚至完全无响应。在Microsoft UI XAML(WinUI)框架中,存在严格的。当主线程被阻塞,布局无法及时更新,可能导致界面元素位置错误。,它会检查当前线程是否是UI线程,如果不是,直接返回。原创 2025-12-16 10:21:23 · 753 阅读 · 0 评论 -
NSIS编写C/C++扩展
由于NSIS默认是不支持C++扩展的,因此可以采用动态加载dll的方式;编译位dll后在C侧动态加载dll。这样就可以充分利用C++的功能了。原创 2025-12-10 18:35:35 · 363 阅读 · 0 评论 -
OCCT画一个立方体
构造函数:只设置参数,(默认)调用Shell()/Solid():构建几何体 +Done()→调用Shape():检查IsDone(),如果false则调用Build()→Solid()→Done()→所以您的问题中的这三个函数确实都会设置myDone为true,确保后续的IsDone()调用返回正确状态。这是OCCT状态管理模式的核心机制。原创 2025-11-23 13:21:37 · 986 阅读 · 0 评论 -
如何让 C++ 无缝衔接 NumPy 的强大计算能力
本文介绍了使用Python C API和NumPy C API进行图像处理的优化方法。通过Py_Initialize()和np::initialize()初始化后,建议使用Py_intptr_t数组指定维度而非py::tuple,确保版本兼容性。示例代码展示了如何创建480x640x3的零值数组,并调用处理函数获取图像数据。这种方法避免了直接依赖Python版本特性,提供了更稳定的实现方案。原创 2025-11-14 21:40:13 · 226 阅读 · 0 评论 -
一次惊心动魄的现场死锁:串行方案终破循环等待
本文讨论了C++线程分离(detach)的风险及死锁问题。当线程独立运行循环时,资源可能被释放导致崩溃。通过案例分析发现,在DLL回调中重复加锁会引发死锁。文章提出队列+串行化解决方案:将回调事件放入队列,由独立线程处理,采用无锁队列算法避免竞争。同时展示了串行化机制的应用,既避免死锁又实现并行功能。虽然该无锁队列存在ABA问题,但发生概率极低。原创 2025-11-14 21:26:07 · 295 阅读 · 0 评论 -
Orleans 流系统握手机制流程图
可靠性:多重容错机制确保消息不丢失一致性:通过令牌机制保证消息顺序性能:按需投递,避免重复处理可扩展性:支持多消费者、多流并发可观测性:完善的日志和监控这个握手机制是 Orleans 流系统可靠性的核心保障,通过精心设计的流程和异常处理,确保了分布式环境下的消息可靠投递。原创 2025-10-18 22:25:05 · 293 阅读 · 0 评论 -
Python 打破次元壁:畅连 DLL
还有一种方式就是通过pyd,在c++侧来进行调用。那种方式更好,要根据具体的场景来定。如果有很多状态在c++代码里面设置,而调用的时候又需要这些状态,那就应该写在C++侧。通过python直接调用dll。包括对指针的传递以及返回的处理。原创 2025-02-24 17:31:44 · 296 阅读 · 0 评论 -
Windows 64位参数传递规则
对于汇编语言,个人觉得更多的需要的是耐心,不像高级语言那样有繁杂的语法体系。在和中讲解了函数调用过程以及参数传递的方式,本文从汇编层面说一下Windows下x64的参数调用相应的规则。通过汇编能让你更彻底的了解到底什么是指针,参数如何传递的。原创 2025-02-09 17:36:35 · 1246 阅读 · 0 评论 -
Python 秒变 “快枪手”:媲美 C 语言速度的秘密武器
在C#中,有native aot,可以将c#代码直接转化为c++,加快了启动速度和反编译的难度,而在python中也有一个类似的工具–。给的定义: Nuitka the Python Compiler。原创 2025-01-26 13:10:14 · 667 阅读 · 0 评论 -
Android 编译和使用libpng
使用上面的命令编译报错,从错误中推测应该需要zlib依赖,还需要下载zlib,由于Android自带zlib库,遂使用cmake进行。修改libpng中CmakeLists.txt中的add_library,修改为动态共享库。从上面的信息中可以看出libpng是一个历史悠久的处理png的库,需要zlib依赖。这个路径是clone下来的libpng中CmakeLists.txt所在的目录。更多内容,欢迎关注我的微信公众号: 半夏之夜的无情剑客。使用下面的命令可以直接编译为静态库。原创 2023-09-08 09:46:40 · 922 阅读 · 0 评论 -
鸿蒙系统的js代码是如何工作的(2)-sensor NAPI层源码解读
sensor中C++部分代码位于base/sensors/sensor下面。ts定义位于interface/sdk-js/api/@system.sensor.d.ts。中介绍了ts接口和C++ NAPI层的对应关系,以及Promise和callback方式对应的代码实现,这里不再展开。原创 2023-08-23 13:26:50 · 439 阅读 · 0 评论 -
黑客攻击-深入理解socket
声明:谢绝一切形式的转载socket套接字socket起源于Unix,而Unix/Linux基本哲学之一就是“一切皆文件”,都可以用“打开open –> 读写write/read –> 关闭close”模式来操作。Socket就是该模式的一个实现, socket即是一种特殊的文件,一些socket函数就是对其进行的操作(读/写IO、打开、关闭). 说白了Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口。在设计模式中,Socket其实就是一个门面模原创 2020-07-01 23:37:24 · 1434 阅读 · 0 评论 -
scanf函数分析
概述scanf()是C语言中的一个输出函数。与printf函数一样,都被声明在头文件stdio.h里,因此在使用scanf函数时要加上#include <stdio.h>。(在有一些实现中,printf函数与scanf函数在使用时可以不使用预编译命令#include <stdio.h>。)它是格式输入函数,即按用户指定的格式从键盘上把数据输入到指定的变量之中。定义int scanf(const char * restrict format,...);函数 scanf() 是原创 2020-06-26 00:24:52 · 718 阅读 · 0 评论 -
格式化字符串漏洞-手动触发
漏洞原因程序使用了格式化字符串作为参数,并且格式化字符串为用户可控。其中触发格式化字符串漏洞函数主要是printf、sprintf、fprintf、prin等C库中print家族的函数。出现漏洞的代码正常的代码://gcc test.c -o test -m32#include<stdio.h>//#include<stdlib.h>//#include<string.h>/*int test(int a,int b){ //int len原创 2020-05-23 01:20:56 · 482 阅读 · 0 评论 -
构造函数的细节
点击(此处)折叠或打开 #includeiostream> using namespace std; class A { public: A(){cout "Hello world\n";}原创 2017-08-06 18:15:07 · 505 阅读 · 0 评论 -
排序算法稳定性
【1】选择排序、快速排序、希尔排序、堆排序不是稳定的排序算法 冒泡排序、插入排序、归并排序和基数排序都是稳定的排序算法。 【2】研究排序算法的稳定性有何意义? 首先,排序算法的稳定性大家应该都知道,通俗地讲就是能保证排序前两个相等的数据其在序列中的先后位置顺序与排序后它们两个先后位置顺序相同。 再简单具体一点,如果A i == A j,Ai 原来在原创 2017-08-06 18:15:04 · 301 阅读 · 0 评论 -
动态链接库
1 静态链接库的优点 (1) 代码装载速度快,执行速度略比动态链接库快; (2) 只需保证在开发者的计算机中有正确的.LIB文件,在以二进制形式发布程序时不需考虑在用户的计算机上.LIB文件是否存在及版本问题,可避免DLL地狱等问题。 2 动态链接库的优点 (1) 更加节省内存并减少页面交换; (2) DLL文件与EXE文原创 2017-08-06 18:15:13 · 441 阅读 · 0 评论 -
京东
点击(此处)折叠或打开 // sa.cpp.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #includeiostream> #include cstdi原创 2017-08-06 18:15:19 · 668 阅读 · 0 评论 -
strtok函数应用
char *strtok(char s[], const char *delim); 点击(此处)折叠或打开 #includeiostream> #includestring.h> #includestring> using nam原创 2017-08-06 18:15:42 · 509 阅读 · 0 评论 -
strncpy的实现
华为面试题:char *mystrcpy(char *dest,char *src,int n){ char *newdest = dest; assert((dest != NULL) && (src != NULL)) while (n &&((*dest++ = *src++) != '\0')) { n--; }原创 2017-08-06 18:15:45 · 1306 阅读 · 0 评论 -
C语言中 .h文件和.c文件的区别
要理解.c文件与.h文件有什么不同之处,首先需要弄明白编译器的工作过程,一般说来编译器会做以下几个过程:1.预处理阶段2.词法与语法分析阶段3.编译阶段,首先编译成纯汇编语句,再将之汇编成跟CPU相关的二进制码,生成各个目标文件4.连接阶段,将各个目标文件中的各段代码进行绝对地址定位,生成跟特定平台相关的可执行文件,当然,最后还可以用objcopy生成纯二进制码,也就是去掉了文件格式信息...原创 2017-08-06 18:16:12 · 65864 阅读 · 3 评论 -
为什么用#ifdef _DEBUG
#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE[] = __FILE__;#endif在MFC中,可以使用DEBUG_NEW宏代替new 运算符来帮助定位内存泄漏。在程序的“Debug”版本中,DEBUG_NEW 将为所分配的每个对象跟踪文件名和行号。当编译程序的“Release”版本时,DEBUG_N原创 2017-08-06 18:17:29 · 864 阅读 · 0 评论 -
最长公共子序列运用
给定一个字符串s,你可以从中删除一些字符,使得剩下的串是一个回文串。如何删除才能使得回文串最长呢?输出需要删除的字符个数。思路:将原字符串反转,求出元字符串与反转字符串最长公共子序列(也就是最长的回文串);c++代码(网上搜的): 点击(此处)折叠或打开 #include bits/stdc++.h>原创 2017-08-06 18:17:49 · 948 阅读 · 0 评论 -
虚函数的实现机制图示
c++规定了虚函数的行为,但将实现留给了编译器作者,不需要知道实现方法就可以使用虚函数,但了解虚函数的工作原理有助于更好的理解概念。 通常编译器处理虚函数的方法是:给每个对象添加一个隐藏成员,隐藏成员中保存了一个指向函数地址数组的指针。这种数组称为虚函数表。 虚函数表中存储了为类对象进行声明的虚函数的地址。例如:基类对象包含一个指针,该指针指向基类中所有虚函数的地址表。派生类对...原创 2017-08-06 18:17:52 · 732 阅读 · 3 评论 -
笔试题(1)
2016.9.4分针和时针每隔(12/11)小时重合一次,一个钟面上分针和时针一昼夜重合(22)次360 除以 (6-1/2) = 12/11小时24除以12/11 = 22本题考查钟表分针所转过的角度计算.钟表里的分钟与时针的转动问题本质上与行程问题中的两人追及问题非常相似.行程问题中的距离相当于这里的角度;行程问题中的速度相当于这里时(分)针的转动速度.2016.8.16原创 2017-08-06 18:18:16 · 607 阅读 · 0 评论 -
getopt_long
文件#include 函数原型int getopt_long(int argc, char * const argv[],const char *optstring,const struct option *longopts, int *longindex);函数说明getopt被用来解析命令行选项参数。getopt_long支持长选项的命令行解析,使用man ge原创 2017-08-06 18:10:50 · 474 阅读 · 0 评论 -
最小生成树之prim算法
最小生成树之prim算法边赋以权值的图称为网或带权图,带权图的生成树也是带权的,生成树T各边的权值总和称为该树的权。 最小生成树(MST):权值最小的生成树。 生成树和最小生成树的应用:要连通n个城市需要n-1条边线路。可以把边上的权值解释为线路的造价。则最小生成树表示使其造价最小的生成树。 构造网的最小生成树必须解决下面两个问题: 1、尽可能选取权值小的边,原创 2017-08-06 18:13:18 · 392 阅读 · 0 评论 -
dwarf调试信息格式入门
一个程序的完成过程一般是编码、编译、运行的过程,当然这是一个理想的过程,所有的开发几乎都不可能是一帆风顺的,总会有些意想不到的错误,这时便需要调试,良好的调试器应该每一个程序员的必备。 那么调试器使用的调试信息是从哪里来的呢?答案简单的很,是从编译后的文件中来的(注意这里编译的时候要使用特定的编译选项,如VC使用debug模式,GCC使用”-g”)。在编译的时候,编译器会从源文件中收集原创 2017-08-06 18:13:09 · 1310 阅读 · 0 评论 -
”奇葩“的递归
点击(此处)折叠或打开 #includestdio.h> typedef int (*fun)(int); int fun1(int i) { return 0; }原创 2017-08-06 18:13:00 · 185 阅读 · 0 评论 -
几种所谓的“高级IO接口”,其中你知道几个
以前,只是的确听说过有“高级IO“,也确实见过、用过,但一直以来真的没注意到”为什么那些接口是高级的?“ 昨儿算是弄明白了,就是大家常说的“零拷贝”,不需要数据在应用空间与内核空间之间来回复制!通过图来对比一下看:普通IO高级IO几种高级IO第一个:void* mmap(void* start,size_t length,int prot,int flags原创 2017-08-06 18:12:55 · 2728 阅读 · 0 评论 -
LINUX C中用define定义可变参数的宏
一般在调试打印Debug信息的时候, 需要可变参数的宏. 从C99开始可以使编译器标准支持可变参数宏(variadic macros), 另外GCC也支持可变参数宏, 但是两种在细节上可能存在区别.1. __VA_ARGS__ __VA_ARGS__ 将 "..." 传递给宏 . 如 #define debug(format, ...) fprintf(stderr,原创 2017-08-06 18:11:56 · 1060 阅读 · 1 评论 -
linux下静态库和动态库的区别
一、引言我们通常把一些公用函数制作成函数库,供其它程序使用。函数库分为静态库和动态库两种。通常情况下,对函数库的链接是放在编译时期(compile time)完成的。所有相关的对象文件(object file)与牵涉到的函数库(library)被链接合成一个可执行文件(executable file)。程序在运行时,与函数库再无瓜葛,因为所有需要的函数已拷贝到相应目录下下。所以这些函数库被成为静态原创 2017-08-06 18:11:17 · 763 阅读 · 0 评论
分享