自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(32)
  • 收藏
  • 关注

原创 DDR理论带宽计算

DDR理论带宽计算。DDR的理论带宽是从硬件能力角度出发,计算的是DDR的理性情况下最大的性能表现,而实际应用当中更加关注的是DDR的实际带宽,而实际带宽与读写的连续性,随机性,缓存等因素都相关。.........

2022-07-06 15:04:03 6227 1

原创 CPU调度策略

摘要:1. FIFO:FCFS,先到先服务,前一个完事下一个开始2. SFJ:Shortest Job First,同时到达的,占用时间最短的任务先开始3. STCF:抢占模式中,加入SFJ,在新任务到达后,调度器会根据所有任务的剩余时间决定先调度哪个任务4. Round-Robin: 轮询,每个任务执行固定时间片,响应时间短,周转时间长5. 合并I/O:允许重叠,在任务I/O时,使用STCF在谈调度策略前,我们先做一些假设。...

2022-06-30 10:12:05 570

原创 Linux的.a、.so和.o文件

.a .so .o

2022-06-16 09:16:29 3560

原创 Linux 各文件夹含义

linux 文件系统

2022-06-14 10:40:54 320

原创 Warp内循环展开 & Warp内部的硬件调度特性

// unrolling warp if (tid < 32) { volatile int *vmem = idata; vmem[tid] += vmem[tid + 32]; vmem[tid] += vmem[tid + 16]; vmem[tid] += vmem[tid + 8]; vmem[tid] += vmem[tid + 4]; vmem[tid] += vmem[t

2021-07-01 16:12:30 297 1

原创 A Safer Alternative to TerminateProcess

Frm:https://www.drdobbs.com/a-safer-alternative-to-terminateprocess/184416547The simplest tasks can sometimes be difficult to get right for all possible situations, especially when you’re dealing with software. Killing an external process on Win32 is just

2021-06-16 16:10:02 191

原创 导致内存碎片的原因 Memory Fragmentation

load过多的DLL,DLL的内存空间与堆空间会相互影响使用HeapAlloc申请内存,导致存在大量小块内存,且这些小块内存leaked,导致没有一个大块连续的内存空间可供分配;或者不同生命周期,不同大小的内存同时申请,申请时是同时的,但是释放却不同时,会导致内存空间不连续在Vista[The information in this topic applies to Windows Server 2003 and Windows XP. Starting with Windows Vista, the.

2021-06-07 11:17:39 256

原创 placement new

如果有这样一个需求:使用一块内存存储一种类型的对象,很快就能使用完。然后还需要一块内存存储另一种类型的对象,还是很快使用完。那么一般的操作时使用多块内存,但是多块内存的问题是,多次new和free,效率不高;另外,多块内存占用空间大。如果上述过程是一个有先后顺序的,那么可以使用一块内存来满足。相当于首先预申请了一块内存,依次为此块内存指定某种类型的对象,指定的过程是会执行对象构造的,使用完后再对此对象进行析构。当确定不再使用这块内存时,再回收此内存上述现象,可以使用placement new来实现语.

2021-05-26 15:08:43 88

原创 硬盘:接口和协议

接口协议IDE(Intergrated Device Electronics)PATASATASATASAS(Series Attached SCSI)SASPCIe, U.2, M.2NVMe, SATA 3.0IDE(Integrated Drive Electronics), 本意是指把控制器与盘体集成在一起的硬盘驱动器,是一种硬盘的传输接口, 有另一个名称叫做ATA(Advanced Technology Attachment),指的是相同的东西...

2021-04-29 20:17:51 1019

原创 C++11新特性: list initialization

C++ 11 提供了一种列表初始化方式,可以作用域任何类型对象的初始化,包括内置类型,自定义类型等list initialization实际上就是{}的形式,或者叫大括号~同时,list initialization还可以作为assignment expression来使用(ref:cppreference )举例几种list initialization的使用方法Struct S{,,,};//结构体的list initializationClass C{,,,};//类的list init.

2021-04-25 00:09:22 304

原创 C++ 模板

模板形参可以是Type parameter,也可以是NonType parameter模板实例化在编译阶段,因此Type parameter需要在编译阶段就确定,同样地NonType parameter也需要在编译阶段确定具体值内联inline 需要放在模板形参表之后,template <typename T> inline T min(const T&, const T&)模板函数的非类型模板形参模板函数的模板形参可以是具体的值,实例化时使用具体的值来代替非.

2021-04-01 20:10:06 275

原创 DeleteFile

The DeleteFile function marks a file for deletion on close.表明DeleteFile仅是标记此文件可以删除,而不是立刻删除此文件Therefore, the file deletion does not occur until the last handle to the file is closed.表明如果文件没有再DeleteFile之后立刻删除,则可能是还有句柄占用此文件Subsequent calls to CreateFile .

2021-03-19 23:05:29 599

原创 HardLink SymbolLink Junctions

HardLink要求link和Target必须在同一个盘符下只能连接文件,不能连接文件夹区别于Copy,HardLink后的相互关联的文件可以更改同步创建: CreateHardLink : The security descriptor belongs to the file to which a hard link points. The link itself is only a directory entry, and does not have a security descripto.

2021-03-19 22:07:45 246

原创 编译预处理添加自定义宏控制代码行为

在编译的预处理阶段,可以添加自定义宏代码中使用#ifdef MACRONAME 可以控制程序的行为相应地,gcc也有类似功能,比如:gcc -DYES -o helloyes hello.c相应地,nvcc也有类似功能,比如:nvcc -arch=sm_60 _DSINGLE_PREC nbody.cn -o nbody在VS里也可以使用此功能测试代码:#include<stdio.h>#include<windows.h>int main(){#ifde.

2021-03-09 22:30:07 307

原创 Warp内部的硬件调度特性

// unrolling warpif (tid < 32){ volatile int *vmem = idata; vmem[tid] += vmem[tid + 32]; vmem[tid] += vmem[tid + 16]; vmem[tid] += vmem[tid + 8]; vmem[tid] += vmem[tid + 4]; vmem[tid] += vmem[tid + 2]; vmem[tid] += vmem[

2021-03-06 18:51:34 255

原创 Debuger: Pesudo-Valude & Pesudo-Register

伪变量是用于在变量窗口或“快速监视”对话框中显示某些信息的术语。 你可以像输入普通变量那样输入伪变量。 但伪变量不是变量,它不与程序中的变量名相对应$err: 显示函数 SetLastError 设置的上一个错误值。 显示的值代表将由 GetLastError 函数返回的值。$err,hr: 查看此值的已解码形式。 例如,如果上一个错误是 3,则 $err,hr 将显示 ERROR_PATH_NOT_FOUND : The system cannot find the path specified.

2021-01-19 00:29:05 301

原创 CPU中的通用寄存器

CPU内部有若干个通用寄存器,它们除了具有与自己名字含义相对应的专用功能外,还具有通用功能,比如传递数据,暂存数据,参与计算等。因此为CPU中的寄存器取名为通用寄存器。16位CPU有14个通用寄存器,32位CPU有16个通用寄存器。下面以32位CPU为例介绍各个通用寄存器的作用。数据寄存器EAX EBX ECX EDX数据寄存器主要用于保存运算的操作数和运算结果,从而节省读取操作数所需的占用的总线以及访问存储器的时间AX寄存器:通常称为累加寄存器(Accumulater Register)。累加

2021-01-12 00:01:58 4523

原创 I/O完成端口

I/O完成端口是一种并发模型相比于简单的多线程,I/O完成端口可以控制处于运行状态的线程数量,减少线程间的切换,减少了线程上下文的切换时间,以及线程上下文相关内存占用CreateIoCompletionPort(HANDLE hFile, HANDLE hExistingCompletionPort, ULONG_PRT CompletionKey, DWORD dwNumberOfConcurrentThreads) 创建一个I/O完成端口,并将一个设备与其关联起来I/O完成端口关联以下内部运作.

2021-01-06 00:10:09 246 1

原创 调用约定:__cdecl, __stdcall, __fastcall

__cdeclC/C++默认的调用约定参数从右至左顺序入栈函数调用完成后由调用者负责清栈。如printf函数等参数个数可变,则必须由调用者清栈,所以printf必须使用__cdecl形式调用约定。因为由调用者负责清栈,所以编译的代码需要包含清栈部分操作,所以编译结果的文件较大C编译器函数名称修饰规则:"__functionName"C++编译器函数名称修饰规则:"?functionName@@YA******@Z",其中******为函数返回值类型和参数类型表__stdcallwi.

2021-01-04 22:41:21 151

原创 C++中的类型转换:static_cast/dynamic_cast/const_cast/reinterpet_cast

static_caststatic_cast<type_id>(expression),使用type_id将expression类型转换static_cast 运算符可用于将指向基类的指针转换为指向派生类的指针等操作。 此类转换并非始终安全。通常使用 static_cast 转换数值数据类型,例如将枚举型转换为整型或将整型转换为浮点型,而且你能确定参与转换的数据类型static_cast 转换安全性不如 dynamic_cast 转换,因为 static_cast 不执行运行时类型检.

2020-12-28 16:58:52 229

原创 操作系统类型:x86, x64, IA64

操作系统的类型分别对应于CPU的架构x86,早起的操作系统版本,从1978年的8086处理器开始,对应于32bit的CPUx64,全称x86-64,1999年AMD最初开发。由于内存寻址空间收到了32bitCPU架构的限制,于是提出了x86-64IA64,早于x64,有Intel联合惠普开发。IA64不与x86兼容,只有Intel的安腾(Itanium系列CPU才可以运行IA64类型操作系统)“IA-64是一个与x86代码的决裂,它是为未来设计的“IA64的系统如果想运行x86的应用程序,则需

2020-12-08 22:07:21 546

原创 操作系统类型:x86, x64, IA64

操作系统的类型分别对应于CPU的架构x86,早起的操作系统版本,从1978年的8086处理器开始,对应于32bit的CPUx64,全称x86-64,1999年AMD最初开发。由于内存寻址空间收到了32bitCPU架构的限制,于是提出了x86-64IA64,早于x64,有Intel联合惠普开发。IA64不与x86兼容,只有Intel的安腾(Itanium系列CPU才可以运行IA64类型操作系统)○ “IA-64是一个与x86代码的决裂,它是为未来设计的“○ IA64的系统如果想运行x86的应用程序.

2020-12-07 20:29:35 358

原创 前向声明(forward declaration)

● 结构体类型S在声明之后定义之前是一个不完全类型(incomplete type),即已知S是一个类型,但不知道包含哪些成员。● 不完全类型只能用于定义指向该类型的指针,或声明使用该类型作为形参指针类型或返回指针类型的函数。指针类型对编译器而言大小固定(如32位机上为四字节),不会出现编译错误。假设先后定义两个结构A和B,且两个结构需要互相引用。在定义A时B还没有定义,则要引用B就需要前向声明结构B(struct B;)。示例如下:typedef BOOL (*func)(const DefStru

2020-12-04 21:48:14 3374

原创 Sleep(0)/SwitchToThread()

Sleep(0)相当于让出当前线程的cpu时间片,将cpu资源让给其他线程使用。在同步操作中经常使用,表明此处需等待一般而言,更具效率,不用控制sleep一段时间,而是将轮询的控制权继续交给操作系统同步的参与者应该是对等的速度,不会具有较大的差距...

2020-11-27 17:19:05 238

转载 Windows虚拟内存空间

For a 32-bit process, the virtual address space is usually the 2-gigabyte range 0x00000000 through 0x7FFFFFFF.For a 64-bit process on 64-bit Windows, virtual address space is the 128-terabyte range 0x000’00000000 through 0x7FFF’FFFFFFFF.In 32-bit Windo.

2020-11-18 22:49:13 204

原创 存储模块总结

ROM: Read Only Memory 掉电数据不丢 速度慢RAM: Random Access Memory 掉电丢数据 速度快SRAM: Static RAM 速度快 容量小 作为CPU的缓存 结构复杂,含有较多晶体管 加电情况下不用刷新不会丢数据DRAM:Dynamic RAM 速度较SRAM慢,容量大,作为内存使用,使用电容存储数据,需要定时刷新SDRAM:Synchronous DRAM 数据的读写需要时钟同步。由于工艺问题,SDRAM的容量较DRAM小,但读写速度较DRAM快,读写.

2020-10-20 23:26:48 3200

原创 编译选项/O

我们通过编译选项/O来指导编译器按怎样的优化形式编译程序,主要是两个方向,一是执行效率高,一是生成的二进制文件小。Visual Studio编译器默认的优化编译选项Release版本是/O2,Debug版本是/Od。同时还都可以在对应的复选框中选择其他选项,那么这些选项的含义是什么,有什么区别?/Ob:/Od下的默认值,禁止内联扩展。仅允许在类声明中定义为C++成员函数中对标记为__inline或__forceinline的函数进行扩展。注意:内联选项仅是对编译器的一个建议,不能保证编译器对指定的函

2020-10-01 10:36:26 981

原创 未处理异常

SetUnhandledExceptionFilter此函数提供给开发者最后的机会来处理异常,否则Windows就会正式认为这个异常没有得到处理。参数PTOP_LEVEL_EXCEPTION_FILTER pTopLevelExceptionFilter是一个异常过滤函数。它可以返回EXCEPTION_EXECUTE_HANDLER表示异常已经处理,但是全局展开会执行,所以finally代码块会执行;EXCEPTION_CONTINUE_EXECUTION表示当前指令继续执行;EXCEPTIO

2020-09-24 20:29:55 598

原创 结构化异常值异常处理程序

异常过滤程序的返回值标识值EXCETPTION_EXECUTE_HANDLER1EXCETPTION_CONTINUE_SEARCH0EXCETPTION_CONTINUE_EXECUTION-1系统处理异常的过程EXCEPTION_EXECUTE_HANDLERexcept语句处理完之后,程序从except块后的第一句代码继续执行。当异常过滤程序的计算结果为EXCEPTION_EXECUTION_HANDLER时,系统必须执行全局展开。全局展开导致所

2020-09-09 21:29:16 424

原创 结构化异常之终止处理程序

结构化异常结构化异常是一种编程方法,将软件主要功能编写与软件异常情况处理相分离。结构化异常可以使得程序更健壮,同时利用结构化异常的某些特点也可以使得代码结构更简洁(如使用终止处理程序来解决多if return情况)。编译器为结构化异常做底层实现,如在进入或离开异常处理代码块时,编译器必须生成一些特殊的代码,以及生成一些关于支持SEH的数据结构表,还必须提供回调函数给操作系统调用,以便系统遍历异常代码块。编译器还负责准备进程的栈框架和其他一些内部信息,这些信息都是操作系统需要使用或者引用的。因为是

2020-08-25 22:12:37 268

原创 C++异常和结构化异常的比较

应该使用哪种异常处理结构化异常是操作系统提供的处理异常的方式,因此结构化异常不局限于处理C++语言的异常。C++异常是处理C++语言的异常方式,当编译器识别出所要处理的异常是C++异常时,会针对C++语言特性做异常处理,比如局部类实例的析构等操作。如果编译器是Windows的VS,则会将C++异常转化为结构化异常的一种特殊形式,VS编译器会在编译阶段将C++异常的try catch转化为_try _except,将throw转化为RaiseException()。...

2020-08-21 08:04:49 399

原创 C++异常处理

异常处理C++提供异常处理,可以使得问题的检测与问题的解决分离,这样在开发时,只需关注如何将问题抛出来,不用考虑针对所抛出的问题需要采取怎样的解决办法。总结而言,C++的异常处理思想是一个工程类思想,是希望开发者关注于程序的主体功能实现。Try块C++异常处理包括:throw表达式,错误检测部分使用这种表达式来说明遇到了不可处理的错误。可以认为,throw的行为相当于引发了一个异常条件,是异常的发生原点。try块,错误处理部分使用它来处理异常。由一个try{}表达式和若干个catch{}子句构成

2020-08-17 22:31:49 237

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除