
C/C++语言
文章平均质量分 79
圆月弯刀丶
重剑无锋 大巧不工
展开
-
C语言函数调用栈
程序的执行过程可看作连续的函数调用。当一个函数执行完毕时,程序要回到调用指令的下一条指令(紧接call指令)处继续执行。函数调用过程通常使用堆栈实现,每个用户态进程对应一个调用栈结构(call stack)。编译器使用堆栈传递函数参数、保存返回地址、临时保存寄存器原有值(即函数调用的上下文)以备恢复以及存储本地局部变量。 不同处理器和编译器的堆栈布局、函数调用方法都可能不同,但堆栈的基本概念是一样的。1 寄存器分配 寄存器是处理器加工数据或运行程序的重要载体,用于存...转载 2020-06-02 11:34:12 · 981 阅读 · 0 评论 -
深度解析程序从编译到运行
深度解析程序从编译到运行前言C语言算是大学里接触的最早,用的最"多"的语言了,对于大部分学习计算机的学生基本上是从开始学习C语言起,凭借着一句经典的"hello, world!"迈入了计算机的世界的,初体味了一把这个世界还有个叫编程的活。作为系统级的开发首选语言,自诞生以来就屹立不倒,C语言的重要性是不言而喻的。做为一个菜鸟级别的程序员,使用C有些年,但对于C没有有真正的了解。我想有...转载 2019-12-20 14:17:54 · 722 阅读 · 0 评论 -
C语言模式实现C++继承和多态
这个问题主要考察的是C和C++的区别,以及C++中继承和多态的概念。C和C++的区别C语言是面向过程的语言,而C++是面向对象的过程。什么是面向对象和面向过程?面向过程就是分析解决问题的步骤,然后用函数把这些步骤一步一步的进行实现,在使用的时候进行一一调用就行了,注重的是对于过程的分析。面向对象则是把构成问题的事进行分成各个对象,建立对象的目的也不仅仅是完成这一个个步骤,而是描述各个...转载 2019-12-18 20:52:14 · 295 阅读 · 0 评论 -
C++对象是创建在堆上,还是在栈上?
https://blog.youkuaiyun.com/Solo_two/article/details/79780086如果需要在堆上创建对象,要么使用new运算符,要么使用malloc系列函数。这点没有异议。真正有异议的是下面的代码:Object obj;此时,obj是在栈上分配的吗?要回答这个问题,我们首先要理解这个语句是什么意思。这个语句就是代表着,在栈上创建对象吗?其实,这...转载 2019-12-15 10:30:35 · 9477 阅读 · 0 评论 -
图说C++对象模型:对象内存布局详解
图说C++对象模型:对象内存布局详解阅读目录0.前言 1.何为C++对象模型? 2.文章内容简介 3.理解虚函数表 3.1.多态与虚表 3.2.使用指针访问虚表 4.对象模型概述 4.1.简单对象模型 4.2.表格驱动模型 4.3.非继承下的C++对象模型 5.继承下的C++对象模型 5.1.单继承 5.2.多继承 6.虚继承 6.1.虚...转载 2019-12-15 10:06:00 · 280 阅读 · 0 评论 -
C++虚函数表的实现细节
转载 2019-12-15 09:41:46 · 267 阅读 · 0 评论 -
C++的那些事:你真的了解引用吗
一、引用的本质是什么说到引用,一般C++的教材中都是这么定义的:1,引用就是一个对象的别名。2,引用不是值不占内存空间。3,引用必须在定义时赋值,将变量与引用绑定。那你有没有想过,上面的定义正确吗?编译器是如何解释引用的?这里先给出引用的本质定义,后面我们再进一步论证。1,引用实际是通过指针实现的。2,引用是一个常量指针。3,引用在内存中占4个字节。4,在对引用定义时,需要对这个常量...转载 2019-12-09 19:54:54 · 218 阅读 · 0 评论 -
C/C++中产生随机数(rand,srand用法)
计算机的随机数都是由伪随机数,即是由小M多项式序列生成的,其中产生每个小序列都有一个初始值,即随机种子。(注意: 小M多项式序列的周期是65535,即每次利用一个随机种子生成的随机数的周期是65535,当你取得65535个随机数后它们又重复出现了。)我们知道rand()函数可以用来产生随机数,但是这不是真正意义上的随机数,是一个伪随机数,是根据一个数(我们可以称它为种子)为基准以某转载 2016-09-09 16:37:22 · 8268 阅读 · 2 评论 -
C/C++的内存泄漏检测工具Valgrind memcheck的使用经历
Linux下的Valgrind真是利器啊(不知道Valgrind的请自觉查看参考文献(1)(2)),帮我找出了不少C++中的内存管理错误,前一阵子还在纠结为什么VS 2013下运行良好的程序到了Linux下用g++编译运行却崩溃了,给出一堆汇编代码也看不懂。久久不得解过后,想想肯定是内存方面的错误,VS在这方面一般都不检查的,就算你的程序千疮百孔,各种内存泄露、内存管理错误,只要不影响运行转载 2016-07-21 16:00:10 · 4514 阅读 · 0 评论 -
QT事件循环与线程
初次读到这篇文章,译者感觉如沐春风,深刻体会到原文作者是花了很大功夫来写这篇文章的,文章深入浅出,相信仔细读完原文或下面译文的读者一定会有收获。由于原文很长,原文作者的行文思路是从事件循环逐渐延伸到线程使用的讨论,译者因时间受限,暂发表有关事件循环的译文。另一半线程实用的译文将近期公布。文中有翻译不当的地方,还请见谅。 介绍线程是qt channel里最流行的讨论话转载 2016-01-24 18:30:37 · 14389 阅读 · 1 评论 -
Qt 线程与事件循环
周末天冷,索性把电脑抱到床上上网,这几天看了 dbzhang800 博客关于 Qt 事件循环的几篇 Blog,发现自己对 Qt 的事件循环有不少误解。从来只看到现象,这次借 dbzhang800 的博客,就代码论事,因此了解到一些 Qt 深层的实现,虽然是在 Qt 庞大的构架里只算的是冰山的一角,确让人颇为收益。 从 dbzhang800 的博客中转载两篇关于事件循环的文章,转载 2016-01-24 18:20:35 · 881 阅读 · 0 评论 -
C++容器使用经验总结
vector:一种随机访问的数组类型,他提供了对数组元素的快速、随机访问,以及在序列尾部快速、随机的插入和删除操作。它在需要时可以改变其大小,也就是说大小可变的向量,比较灵活。可取代C++语言本身提供的传统数组。提供随机存储能力。操作尾端元素的速度最快。由于所有元素占用连续空间,所以一旦进行插入或者删除动作,有可能使原本的某些 iterators失效。转载 2015-09-11 10:50:33 · 653 阅读 · 0 评论 -
C++11 标准新特性: 右值引用与转移语义
原文地址:http://www.ibm.com/developerworks/cn/aix/library/1307_lisl_c11/ C++ 的新标准 C++11 已经发布一段时间了。本文介绍了新标准中的一个特性,右值引用和转移语义。这个特性能够使代码更加简洁高效。新特性的目的右值引用 (Rvalue转载 2015-08-06 09:50:22 · 474 阅读 · 0 评论 -
C++虚函数及虚函数表解析
原文链接:http://www.keepsimply.org/2012/07/11/cpp-vtable/作者:独酌逸醉时间:2012.07.11声明: 本文内容由自互联网资源(见参考资料)、个人的一些 C++ 学习感悟、个人实践整理而成。文章仅以技术学习和交流为目的。如果您发现了文中的错误,或者您有的不同的见解,可以给我留言或者给我发邮件,我们共同探 讨。如果您转载 2015-08-03 14:02:54 · 500 阅读 · 0 评论 -
结构体字节对齐
先说个题外话:早些年我学C程序设计时,写过一段解释硬盘MBR分区表的代码,对着磁盘编辑器怎么看,怎么对,可一执行,结果就错了。当时调试也不太会,又根本没听过结构体对齐这一说,所以,问题解决不了,好几天都十分纠结。后来万般无奈请教一个朋友,才获悉可能是结构体对齐的事,一查、一改,果真如此。 问题是解决了,可网上的资料多数只提到内存对齐是如何做转载 2015-05-12 14:21:45 · 902 阅读 · 0 评论 -
VC 宏与预处理使用方法总结(转)
目录(?)[-]C/C++ 预定义宏^C/C++ 预定义宏用途:诊断与调试输出^CRT 和 C 标准库中的宏^NULL 空指针^limits.h 整数类型常量^float.h 浮点类型常量^math.h 数学常量^EOF 常量^errno.h 错误代码^locale 类别^_MAX_PATH 等文件名与路径长度限制^RAND_MAX 随机数最大值^va_arg/转载 2015-04-20 09:33:05 · 1725 阅读 · 0 评论 -
C++实现ftp客户端
c++commandstringapisocketdownload[cpp] view plaincopyprint?#ifndef CLIENT_H_ #define CLIENT_H_ #include #include #include #include #include #include #include #include转载 2015-04-13 17:28:04 · 1525 阅读 · 2 评论 -
VC++的Unicode编程
一、什么是Unicode先从ASCII说起,ASCII是用来表示英文字符的一种编码规范。每个ASCII字符占用1个字节,因此,ASCII编码可以表示的最大字符数是255(00H―FFH)。其实,英文字符并没有那么多,一般只用前128个(00H―7FH,最高位为0),其中包括了控制字符、数字、大小写字母和其它一些符号。而最高位为1的另128个字符(80H―FFH)被称为“扩展ASCII”,一般用转载 2014-08-12 09:50:27 · 810 阅读 · 0 评论 -
C标准规定的Implementation Defined与Integer Promotion
转载地址:http://hi.baidu.com/thewillreigns/blog/item/67e665c4296e69c038db492d.htmlchar 和 unsigned char是无符号的两者都作为字符用的话是没有区别的,但当整数用时有区别: char 整数范围为-128到127( 0x80__0x7F), 而unsigned char 整数范围为0到转载 2014-07-30 18:17:46 · 1743 阅读 · 1 评论 -
C语言如何产生随机数
用rand()和srand()产生伪随机数的方法总结---------------------------------标准库(被包含于中)提供两个帮助生成伪随机数的函数:函数一:int rand(void);从srand (seed)中指定的seed开始,返回一个[seed, RAND_MAX(0x7fff))间的随机整数。函数二:void srand(unsigned转载 2014-07-24 17:44:32 · 2034 阅读 · 1 评论 -
函数调用约定
(1) _stdcall调用 _stdcall是Pascal程序的缺省调用方式,参数采用从右到左的压栈方式,被调函数自身在返回前清空堆栈。 WIN32 Api都采用_stdcall调用方式,这样的宏定义说明了问题: #define WINAPI _stdcall 按C编译方式,_stdcall调用约定在输出函数名前面加下划线,后面加“@”符号和参数的字节数,形如。转载 2014-06-30 17:48:59 · 680 阅读 · 0 评论 -
Google-C++编程规范(完整)
· 背景Google的开源项目大多使用C++开发。每一个C++程序员也都知道,C++具有很多强大的语言特性,但这种强大不可避免的导致它的复杂,这种复杂会使得代码更易于出现bug、难于阅读和维护。本指南的目的是通过详细阐述在C++编码时要怎样写、不要怎样写来规避其复杂性。这些规则可在允许代码有效使用C++语言特性的同时使其易于管理。风格,也被视为可读性,主要指称管理C++代转载 2013-09-29 15:29:06 · 1801 阅读 · 0 评论 -
STL学习小结
STL就是Standard Template Library,标准模板库。这可能是一个历史上最令人兴奋的工具的最无聊的术语。从根本上说,STL是一些“容器”的集合,这些“容器”有list, vector,set,map等,STL也是算法和其它一些组件的集合。这里的“容器”和算法的集合指的是世界上很多聪明人很多年的杰作。是C++标准库的一个重要组成部分,它由Stepanov and Lee等人最转载 2013-09-24 17:44:25 · 799 阅读 · 0 评论 -
两次从C++回归C的高手评论C++
【引自云风的博客】首先,给不熟悉我的朋友做一个技术背景的自我介绍:我不是一个Linux的fans,虽然我今天对Windows也没有什么好感,但我的大部分工作还是在Windows上做应用软件开发的,对Windows还算熟悉。现在我也用非Windows的系统,但那是一台FreeBSD的机器,不是Linux。我自认为对C++相当熟悉,精读过市面上能买到的关于C++的大部分书籍,像D&E转载 2013-09-23 17:38:32 · 1190 阅读 · 0 评论 -
为什么使用C++
为什么使用C++?在你皱眉准备关掉这个网页之前,试着回答这样一个简单的问题。答案是效率,是吗?每个人都知道答案。但是,我们应该以更专业的角度来讨论一种编程语言或是与之相关的事情。那么,让我再问你一个问题:效率是否是人们选择使用C++的唯一理由,为什么他们不用C呢?C的效率公认比C++高(当然,我知道,现已证明在某种程度上说,C并不比C++高效,但请不要在此挑错,因为即使他们是等效的,问题仍转载 2013-09-23 17:36:04 · 1260 阅读 · 1 评论 -
RAII惯用法:C++资源管理的利器
RAII惯用法:C++资源管理的利器RAII是指C++语言中的一个惯用法(idiom),它是“ResourceAcquisition Is Initialization”的首字母缩写。中文可将其翻译为“资源获取就是初始化”。虽然从某种程度上说这个名称并没有体现出该惯性法的本质精神,但是作为标准C++资源管理的关键技术,RAII早已在C++社群中深入人心。我记得第一次学到RAII惯用法是转载 2013-09-18 13:42:52 · 779 阅读 · 0 评论 -
浅析C++继承与多态
当我们进一步研究类与对象的时候,难免的就要考虑到类本身的一些特点以及类与其它类之间的关系。在本专题开始之前,我们已经接触到像一个类对象作为另一个类成员的嵌套关系了。本专题,我们就专心的研究一下类与类之间的继承关系和其类本身的特点。 我们知道,类与对象的概念是来自于对现实事物的模拟,就像孩子用于其父母的一些特征,不论是木桌还是石桌都有桌子的特点。同样,类与类之间自然的也转载 2013-09-16 17:22:13 · 1136 阅读 · 0 评论 -
C/C++中的日期和时间 time_t与struct tm转换
摘要:本文从介绍基础概念入手,探讨了在C/C++中对日期和时间操作所用到的数据结构和函数,并对计时、时间的获取、时间的计算和显示格式等方面进行了阐述。本文还通过大量的实例向你展示了time.h头文件中声明的各种函数和数据结构的详细使用方法。关键字:UTC(世界标准时间),Calendar Time(日历时间),epoch(时间点),clock tick(时钟计时单元)1.概转载 2013-08-30 17:01:49 · 2878 阅读 · 0 评论 -
boost::regex学习
一:简单的例子std::string regstr = "a+";boost::regex expression(regstr);std::string testString = "aaa";// 匹配至少一个aif( boost::regex_match(testString, expression) ){std::cout}else{st转载 2013-08-26 18:05:41 · 759 阅读 · 0 评论 -
C运行时库详解
一、什么是C运行时库1)C运行时库就是 C run-time library,是 C 而非 C++ 语言世界的概念:取这个名字就是因为你的 C 程序运行时需要这些库中的函数.2)C 语言是所谓的“小内核”语言,就其语言本身来说很小(不多的关键字,程序流程控制,数据类型等);所以,C 语言内核开发出来之后,Dennis Ritchie 和 Brian Kernighan 就用 C 本转载 2013-08-26 17:36:27 · 901 阅读 · 0 评论 -
#pragma用法详解
目录:(0) 前言(1) #pragma message能够在编译信息输出窗口中输出相应的信息(2) #pragma code_seg能够设置程序中函数代码存放的代码段,开发驱动程序的时会用到(3) #pragma once若用在头文件的最开始处就能够保证头文件被编译一次(4) #pragma hdrstop表示预编译头文件到此为止(5) #pragma reso转载 2013-08-25 09:23:59 · 944 阅读 · 0 评论 -
C语言文件操作函数大全
C语言文件操作函数大全clearerr(清除文件流的错误旗标) 相关函数 feof表头文件 #include 定义函数 void clearerr(FILE * stream); 函数说明 clearerr()清除参数stream指定的文件流所使用的错误旗标。 返回值 fclose(关闭文件) 相关函数 close,fflush,fopen,setbuf转载 2013-07-12 12:49:33 · 791 阅读 · 0 评论 -
boost的字符串算法
boost::algorithm简介boost::algorithm提供了很多字符串算法,包括: 大小写转换; 去除无效字符; 谓词; 查找; 删除/替换; 切割; 连接; 我们用写例子的方式来了解boost::algorithm能够为我们做些什么。boost::algorithm学习#include using namespace std;using name转载 2013-07-09 09:11:30 · 1134 阅读 · 0 评论 -
宏_T详解
1. 定义_T("")是一个宏,定义于tchar.h下。[cpp] view plaincopyprint?#define _T(x) __T(x) #define __T(x) L ## x 2. 作用他的作用是让你的程序支持Unicode编码,因为Windows使用两种字符集ANSI和UNICOD转载 2013-07-03 17:29:44 · 1166 阅读 · 0 评论 -
【Boost】boost库asio详解——boost::asio::buffer用法
1. asio::buffer常用的构造方法asio::buffer有多种的构造方法,而且buffer大小是自动管理的1.1 字符数组[cpp] view plaincopyprint?char d1[128]; size_t bytes_transferred = socket.receive(boost::asio::buffe转载 2013-07-03 17:17:41 · 2538 阅读 · 0 评论 -
【C++11】新特性——auto的使用
C++11中引入的auto主要有两种用途:自动类型推断和返回值占位。auto在C++98中的标识临时变量的语义,由于使用极少且多余,在C++11中已被删除。前后两个标准的auto,完全是两个概念。1. 自动类型推断 auto自动类型推断,用于从初始化表达式中推断出变量的数据类型。通过auto的自动类型推断,可以大大简化我们的编程工作。下面是一些使用auto的例子。转载 2013-07-03 17:09:13 · 3822 阅读 · 0 评论 -
#define用法以及#define和typedef区别
#define用法以及#define和typedef区别1.简单的define定义#define MAXTIME 1000 2.define的“函数定义”define可以像函数那样接受一些参数,如下#define max(x,y) (x)>(y)?(x):(y);因为这个“函数”没有类型检查,就好像一个函数模板似的,没有模板那么安全就是了。但是这样做的话转载 2013-05-27 11:20:32 · 1062 阅读 · 0 评论 -
TLS--线程局部存储
TLS--线程局部存储概念:线程局部存储(Thread Local Storage,TLS)用来将数据与一个正在执行的指定线程关联起来。进程中的全局变量与函数内定义的静态(static)变量,是各个线程都可以访问的共享变量。在一个线程修改的内存内容,对所有线程都生效。这是一个优点也是一个缺点。说它是优点,线程的数据交换变得非常快捷。说它是缺点,一个线程死掉了,其它线程也性命不保;转载 2013-05-27 11:17:28 · 954 阅读 · 0 评论 -
C/C++动态内存创建与内存管理
1内存空间逻辑组织A 静态数据区:内存在程序启动的时候才被分配,而且可能直到程序开始执行的时候才被初始化,如函数中的静态变量就是在程序第一次执行到定义该变量的代码时才被初始化。所分配的内存在程序的整个运行期间都存在,如全局变量,static变量等。注意:初始化的全局变量和静态变量在一块区域,未初始化的全局变量与静态变量在相邻的另一块区域,同时未被初始化的对象存储区可以通过voi转载 2013-05-17 20:42:06 · 1002 阅读 · 0 评论 -
使用Boost.Asio编写通信程序
摘要:本文通过形像而活泼的语言简单地介绍了Boost::asio库的使用,作为asio的一个入门介绍是非常合适的,可以给人一种新鲜的感觉,同时也能让体验到asio的主要内容。 Boost.Asio是一个跨平台的网络及底层IO的C++编程库,它使用现代C++手法实现了统一的异步调用模型。ASIO的同步方式ASIO库能够使用TCP、UDP、ICMP、串口来发送/接收数转载 2013-03-01 15:24:24 · 1012 阅读 · 0 评论