![](https://img-blog.csdnimg.cn/20201014180756738.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
编程基础
0_蜡笔小熊_0
不想做大神不是技术宅的程序员
展开
-
内存对齐规则以及作用
首先由一个程序引入话题: 1 //环境:vc6 + windows sp2 2 //程序1 3 #include 4 5 using namespace std; 6 7 struct st1 8 { 9 char a ;10 int b ;11 short c ;12 };13 14 struct st转载 2016-08-11 11:59:19 · 269 阅读 · 0 评论 -
C中可变参数函数及log函数运用
C语言中函数可以定义为可变参数的。看printf的定义:int printf(char *fmt, ...);可变参数的处理需要用到stdarg.h中的一些宏。C语言标准库中头文件stdarg.h包含了一组能够遍历变长参数列表的宏。主要包含下面几个:1、va_list 用来声明一个表示参数表中各个参数的变量。2、va_start 初始原创 2017-03-21 15:40:09 · 1328 阅读 · 0 评论 -
为类写一个自己的堆
为什么要创建自己的堆呢?有多方面原因:对组件进行保护更有效的内存管理局部访问避免线程同步开销快速释放在C++中,我们用new操作符来分配类对象,用delete操作符来释放它。通过对C++类的new和delete操作符进行重载,我们可以非常容易地将堆函数加以运用。总体来看,不为每一个类创建堆的唯一优势是不会有额外的性能和内存开销。但是这些性能和内存开销并不大,与潜在的回报原创 2017-01-21 20:33:30 · 331 阅读 · 0 评论 -
用内存映射文件实现进程间通信
使用内存映射文件的一般流程: 由于内存映射文件的一致性,即系统保证在同一文件映射对象的多个视图间保持一致。这可以作为进程通讯的基础,而且在Windows上,同一台机器上共享数据的最底层机制都是内存映射文件。 许多应用程序会在运行过程中创建一些数据,并需要将这些数据传输给其他进程,或与其他进程共享这些数据。如果为了共享数据而必须让应用程序在磁盘上创建数据文件并把数据保存在文原创 2017-01-21 18:05:04 · 3968 阅读 · 1 评论 -
用内存映射文件来处理大文件
1.使用内存映射文件来处理文件的内容,我们先打开文件并向系统预订一块虚拟地址空间区域。接着让系统把文件的第一个字节映射到该区域的第一个字节。然后就可以访问这块虚拟内存区域,就好像它实际包含了文件一样。2.这种方法的最大的优点在于让系统为我们处理所有与缓存有关的操作。我们不必再分配任何内存,把文件中的数据载入内存,把数据写回文件、以及释放内存块。3.而且我们还可以通过只映射文原创 2017-01-21 16:40:14 · 751 阅读 · 0 评论 -
程序的多个实例间共享数据
程序比较简单,注释也比较详细,不再做过多说明。#include #include //创建一个共享段Shared,一段变量放在单独的段中,//系统不会再在同一个可执行或DLL的每一个实例中为//它们创建新的实例了#pragma data_seg("Shared")unsigned count=0;#pragma data_seg()//告诉链接器共享这个段中的变量#pra原创 2017-01-21 11:58:47 · 1513 阅读 · 0 评论 -
用命名内核对象判断程序是否有实例正在运行
命名内核对象可以进程之间共享句柄通过让进程每次运行创建一个命名内核对象,判断创建是否成功用GetLastError()获得错误代码,即可判断程序是否有实例正在运行代码页比较简单,不做过多描述,详情参考《windows核心编程》#include #include int main(){ HANDLE hMutex = CreateMutex( NULL, false, "u原创 2017-01-21 10:58:26 · 284 阅读 · 0 评论 -
ANSI与UNICODE的相互转换
ANSI与UNICODE的相互转换需要用到可格式化字符串函数:*sprintf 和 *sprintf_S注意:1.sprintf和swprintf由于安全性欠佳,已经被sprintf_s和swprintf_s替代。2.上述代码“%S"中的S为大写,这一般是新手的问题所在。原创 2017-01-11 16:54:30 · 2958 阅读 · 0 评论 -
如何通过进程名字关闭系统正在运行的进程
STEP ONE终止正在运行的进程,我们用TerminateProcess()函数,函数原型:BOOL TerminateProcess( HANDLE hProcess, // handle to the process UINT uExitCode // exit code for the process);So,在这儿,我们需要获得需要终止的进程的句柄。原创 2017-01-14 09:03:51 · 802 阅读 · 0 评论 -
VS2013使用技巧汇总
1. Peek View在不新建TAB的情况下快速查看、编辑一个函数的代码。以前要看一个函数的实现,需要在使用的地方点击F12跳转到该函数,实际上这是很浪费时间的。VS2013Peek View便解决了这个问题。在光标移至某个函数下,按下alt+F12。用法:在光标移至某个函数下,按下alt+F12。 可以看出在当前页即有当前函数的实现。然后在Pee转载 2017-01-08 20:28:09 · 7412 阅读 · 0 评论 -
Linux虚拟地址空间布局以及进程栈和线程栈总结
目录(?)[-]一Linux虚拟地址空间布局1 内核空间2 栈stack3 内存映射段mmap4 堆heap5 BSS段 6 数据段Data 7 代码段text 8 保留区二Linux 中的各种栈进程栈 线程栈 内核栈 中断栈Linux 中有几种栈各种栈的内存位置一进程栈二线程栈三进程内核栈四中断栈Linux 为什么需要区分这些栈转载 2017-01-06 20:41:33 · 1446 阅读 · 0 评论 -
进程地址空间的一点认识
在进入正题前先来谈谈操作系统内存管理机制的发展历程,了解这些有利于我们更好了解目前操作系统的内存管理机制。一 早期的内存分配机制在早期的计算机中,要运行一个程序,会把这些程序全都装入内存,程序都是直接运行在内存上的,也就是说程序中访问的内存地址都是实际的物理内存地址。当计算机同时运行多个程序时,必须保证这些程序用到的内存总量要小于计算机实际物理内存的大小。那当程序同时运行多个程序时,操作系转载 2017-01-06 15:10:46 · 1040 阅读 · 1 评论 -
VS调试:dump定位
在系统中异常或者崩溃的时候,来生成dump文件,然后用调试器来调试,可以快速精确定位崩溃的代码行。这样就可以把生产环境中的dmp文件,拷贝到自己的开发机器上,调试就可以找到错误的位置,配合程序调试符号pdb文件,直接可以定位到源代码中位置,真是太神奇了。1.创建dump文件的三种方法:第一种:通过任务管理器:这种适用在程序挂了(crash)的时候进程还未退出,比如我运行程序转载 2017-01-05 11:15:30 · 9838 阅读 · 0 评论 -
程序的机器级表示<CSAPP>
1.一个IA32 CPU包含一组8个存储32位值的寄存器。这些寄存器用来存储整数数据和指针。" style="border:0px; max-width:100%; display:block; margin:1em auto">2.操作数指示符,指示出一个操作中药引用的源数据值,以及放在结果的目标位置。源数据可以以常数形式给出,或是寄存器或存储器中读出,结果放在寄存器或存储器中。原创 2016-12-24 10:33:15 · 585 阅读 · 0 评论 -
C++对象内存模型
谈VC++对象模型(美)简.格雷程化 译译者前言一个C++程序员,想要进一步提升技术水平的话,应该多了解一些语言的语意细 节。对于使用VC++的程序员来说,还应该了解一些VC++对于C++的诠释。 Inside the C++ Object Model虽然是一本好书,然而,书的篇幅多一些,又和具体的VC++关系小一些。因此,从篇幅和内容来看,译者认为本文是深入理解C+转载 2016-11-21 14:37:07 · 4798 阅读 · 2 评论 -
字符串和数组经典面试问题总结
数组和字符串是密切相互的。从抽象的意义上说,字符串只是一个(可能是只读的)字符数组。进入正题,这方面的经典面试问题有哪些呢?编写strcpy函数问题描述:编写c语言的strcpy函数,完成字符数组复制功能。代码及分析如下:#include char* str_cpy(char *dis_str,const char *sou_str){ if((!dis_原创 2016-08-11 19:22:09 · 467 阅读 · 1 评论 -
控制反转(IoC)与依赖注入(DI)
1.控制反转(Inversion of Control)与依赖注入(Dependency Injection)控制反转即IoC (Inversion of Control),它把传统上由程序代码直接操控的对象的调用权交给容器,通过容器来实现对象组件的装配和管理。所谓的“控制反转”概念就是对组件对象控制权的转移,从程序代码本身转移到了外部容器。IoC是一个很大的概念,可以用不同的方式来实现。转载 2017-04-07 15:19:35 · 676 阅读 · 0 评论