![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C/C++
文章平均质量分 69
微岩
这个作者很懒,什么都没留下…
展开
-
C++程序内存分配详解
1. 硬盘中的结构——程序首先在Linux下查看一下test文件的信息:[root@localhost Ctest]# file test //此文件基本情况test: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV),for GNU/Linux 2.2.5, dynamically linked (uses sh原创 2013-10-19 11:13:22 · 2005 阅读 · 0 评论 -
C函数指针
1. 函数指针和函数指针变量在C语言中,一个函数总是占用一段连续的内存区,而函数名就是该函数所占内存区的首地址。所以说函数名也是一个指针,可以和数组名相对照起来。我们可以把函数的这个首地址(或称入口地址)赋予一个指针变量,使该指针变量指向该函数——函数指针变量2. 函数指针变量声明类型说明符 (*指针变量名)();如:int(*pFunc)( int a, i原创 2013-11-13 16:50:59 · 1332 阅读 · 0 评论 -
C++ extern "C"
在C++中使用C模块通常要加extern "C",这是为什么呢?下面将详细解答。1. extern "C"是链接声明1.1 externextern是C/C++语言中表明函数和全局变量作用范围(可见性)的关键字,该关键字告诉编译器,其声明的函数和变量可以在本模块或其它模块中使用。通常,在模块的头文件中对本模块提供给其它模块引用的函数和全局变量以关键字extern声明。例如,如果原创 2013-11-11 21:26:49 · 2295 阅读 · 1 评论 -
C++和操作系统面试问题分类
inline的使用是有所限制的,inline只适合函数体内代码简单的函数使用,不能包含复杂的结构控制语句例如while switch,并且不能内联函数本身不能是直接递归函数(自己内部还调用自己的函数)C++多态实现机制:在C++中,对于有virtual的类,其sizeof会比正常情况多处4个字节。既在类的最开始四个字节,放的是VTABLE表的地址(void *类型)。而在VTABLE中,所有虚转载 2013-11-11 22:08:24 · 2115 阅读 · 0 评论 -
C++基础面试题
const符号常量:(1)、const char *p(2)、char const *p(3)、char * const p如果const位于星号的左侧,则const就是用来修饰指针所指向的变量,即指针指向为常量。如果const位于星号的右侧,const就是修饰指针本身,即指针本身是常量。析构函数和虚函数的用法和作用?析构函数的作用是当对象生命期结束时释放对象所占用转载 2013-11-11 22:01:27 · 1275 阅读 · 0 评论 -
C++中的4种类型转换方式
1. 4种类型转换方式reinterpret_cast(expression)dynamic_cast(expression)static_cast(expression)const_cast(expression)static_cast:用于基本类型和继承关系的转换,更改变量内部表示(最常用)reinsterpret_cast:将指针解释为另一种指针,不修改指针指向的数原创 2013-11-11 21:55:10 · 2070 阅读 · 0 评论 -
Linux C 网络编程——6. IO阻塞、非阻塞、复用、信号驱动、异步驱动
在Linux中进程空间和内核空间是分开的,系统调用是在Kernel中,IO 数据会先复制到进程空间,这样进程才能访问。所以Linux I/O分为2个步骤:等待数据和复制数据1. 阻塞I/O(Blocking IO)socket的默认方式。请求IO进程(recvfrom)会一直处于阻塞状态,这种效率极低。2. 非阻塞IOrecvfrom不会阻塞,通过不断查询K原创 2013-11-05 18:27:49 · 2615 阅读 · 0 评论 -
设计模式——工厂模式(Factory)
1. 定义定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。Product:负责定义产品的共性,实现对事物最抽象定义;Creator:抽象创建类,也就是抽象工厂ConcreteCreator:实现具体如何创建产品类2. 优点(1)良好的封装性,代码结构清晰一个对象创建是有条件约束的,如一个调用者需要一个具体的产品原创 2013-11-05 17:03:35 · 1371 阅读 · 0 评论 -
Linux C 网络编程——5. 并发服务器
1. 原理在Linux C 网络编程——4. 简单TCP Socket程序中实现了一个最基本的基于TCP的CS通信,这里介绍一种可以允许Server端可以同时处理多个请求(并发服务器)。原理:每次accept服务器调用fork(),创建一个子进程处理请求。2. 实现只需要修改上一篇文章中的Server.c的while循环即可while(1){ addr_原创 2013-11-05 17:26:05 · 2471 阅读 · 0 评论 -
设计模式——代理模式(Proxy)
1. 定义通俗解释:就好像玩游戏一样,请别人帮你代练。形式化定义:provide a surrogate or placeholder for another object to control access to it. 为其他对象提供一种代理以控制对这个对象的访问。 代理模式的通用类图如图1-1所示。 图1-1 代理模式的通用类图Subjec原创 2013-11-05 12:17:06 · 1555 阅读 · 0 评论 -
Linux C 网络编程——3. TCP套接口编程
1. 基本流程2. socket()int socket(int domain, int type, int protocol);socket()打开一个网络通讯端口,如果成功的话,就像open()一样返回一个文件描述符,应用程序可以像读写文件一样用read/write在网络上收发数据,如果socket()调用出错则返回-1。(1)domain:AF_INET:IP原创 2013-10-30 19:58:54 · 2780 阅读 · 0 评论 -
Linux C 网络编程——1. 大端序和小端序
1. 字节序数据在内存中有2种存放方式:大端序(Big-Endian):低位字节放在高位地址小端序(Little-Endian):相反x86系列则采用little endian方式存储数据如:0x12345678数据以8bit位单位,在内存中的存储如下:Big Endian 低地址原创 2013-10-30 18:53:07 · 2681 阅读 · 0 评论 -
unistd.h
unistd.h 是 C 和 C++ 程序设计语言中提供对 POSIX 操作系统 API 的访问功能的头文件的名称。该头文件由 POSIX.1 标准(单一UNIX规范的基础)提出,故所有遵循该标准的操作系统和编译器均应提供该头文件(如 Unix 的所有官方版本,包括 Mac OS X、Linux 等)。对于类 Unix 系统,unistd.h 中所定义的接口通常都是大量针对系统调用的封装(英语转载 2013-10-30 16:09:16 · 1730 阅读 · 0 评论 -
errno , perror,strerror
1. 简介很多系统函数在错误返回时将错误原因记录在libc定义的全局变量errno中,每种错误原因对应一个错误码。errno在头文件errno.h中声明,是一个整型变量,所有错误码都是正整数。然后我们可以用perror或strerror函数将errno解释成字符串2. perror#include void perror(const char *s);原创 2013-10-30 16:00:17 · 2600 阅读 · 0 评论 -
C/C++ sizeof 总结
最近很多C/C++的笔试面试中都会涉及到sizeof的问题,所以在此总结一下。1. 定义首先要注意的是sizeof不是函数, 是C的一个单目运算符(++, --等)。sizeof有2种使用方式:(1) sizeof( int )(2) sizeof int一般采用第一种方式返回值:size_t 类型。2. sizeof ( 基本数值类型 )直接返回原创 2013-10-25 15:34:53 · 1678 阅读 · 0 评论 -
百度2014校园招聘研发工程师笔试题+答案
一,简答题(30分)1,当前计算机系统一般会采用层次结构存储数据,请介绍下典型计算机存储系统一般分为哪几个层次,为什么采用分层存储数据能有效提高程序的执行效率?10分(1)典型计算机存储系统一般分为:高速缓存(Cache),主存,辅存;三者速度递减,价格递减,容量递增。(2)原因:最基本的原理是程序的局部性,即某一指令(数据)一旦被执行(访问),那么不久之后很可能再次被执行(访问)原创 2013-10-08 17:46:45 · 4311 阅读 · 4 评论 -
荷兰旗问题(三色旗排序)
摘要:荷兰旗问题是三色排序,即某一组数据,元素的值只能为a,b ,c。把这组数据按照a, b, c的顺序排序。本文介绍了一种时间复杂度为O(n),空间复杂度O(1)的算法。1. 问题描述某盒子中有n个球,每个球的颜色可以是红、蓝、白,现在要求把球按照红、蓝、白的顺序摆放。这个问题叫做荷兰旗问题(荷兰旗由红、蓝、白三色组成)。对问题的抽象:一数列Data中原创 2013-12-28 20:31:49 · 5505 阅读 · 0 评论 -
Sqlite3,C++开发详解
C/C++中调用SQLITE3的基本步骤Sqlite 是一个面向嵌入式系统的数据库,编译完成只有200K,同时支持2T的数据记录。对于嵌入式设备是一个很好的数据库引擎。本文通过一个小例子说明如何在C 与C++调用Sqlite API完成数据库的创建、插入数据与查询数据。本文的开发环境为(Redhat9.0 + Qtopia2.1.2 + Sqlite3)安装Sqlite3:从www转载 2013-12-24 14:48:48 · 1929 阅读 · 0 评论 -
GDB多进程调试
1. follow-fork-mode作用:设置调试到创建子进程时,是跟踪子进程还是父进程。用法:set follow-fork-mode [child | parent]child: fork之后继续调试子进程,父进程不受影响parent:fork之后继续调试父进程,子进程不受影响2. detach-on-fork作用:用于设置:当在多进程环境下调试时,除了当原创 2014-03-21 16:38:38 · 1526 阅读 · 0 评论 -
Android NDK 编译优化:浮点数计算优化
1. 浮点数计算优化1.1 float-ab-mfloat-abi=hard在编译带有浮点参数的函数时,有三种可能的编译选项:-mfloat-abi=soft/softfp/hard。“soft”选项:表明不使用FPU硬件,而是使用GCC的整数算术运算来模拟浮点运算。“softfp”选项:表明要使用FPU硬件来做浮点运算,只是,函数的参数传递到整数寄存器(r0-r3)中,然...原创 2018-06-14 18:01:19 · 2728 阅读 · 2 评论 -
Android gnustl_static VS gnustl_share
0. 前言使用gnustl_static,尽量避免使用gnustl_share。此外gnustl将逐步废弃!1. gnustl1.1 简介gnustl: Android上的GNU C++库,对应GNU/Linux系统中的libstdc++。这个库和GCC仅仅绑定,但是后期不再更新,最新NDK不再支持此库和Clang存在部分冲突 Note: 新版NDK将会删原创 2018-01-31 15:32:46 · 8763 阅读 · 2 评论 -
并发优化笔记
0. 前言多核并发编程。1. OpenMPOpenMP适用于统一/共享的内存模型(unified/shared memory),比如多核CPU共享同一个内存,各个核心通过内存分享交换数据。 所以OpenMP通常用于多核处理器计算优化。 OpenMP:线程级(并行粒度);共享存储;隐式(数据分配方式);可扩展性差;2. MPIMPI比较复杂,需要程序员自己管理数据分发,并且手动实现各个进程之间的通原创 2017-11-13 15:48:25 · 407 阅读 · 0 评论 -
__stdcall,__cdecl,__fastcall的区别
一、三者区别一览表 __stdcall __cdecl __fastcall 参数传递方式 右->左 压栈 右->左 压栈 清理栈方式 被调用函数清理(即函数自己清理),多数据情况使用这个 调用者清理 栈适用场合 Win API c/C++ MFC默认方式可变参数的时候使用 C编译修饰约定(它们均不改变输出函数名中的字符大小写) 约定在输出函数名转载 2017-09-27 10:40:25 · 548 阅读 · 0 评论 -
C++11资料汇总[转]
原文链接: http://www.cnblogs.com/haippy/p/3235560.html引言C++11 自2011年发布以来已经快两年了,之前一直没怎么关注,直到最近几个月才看了一些 C++11 的新特性,今后几篇博客我都会写一些关于 C++11 的特性,算是记录一下自己学到的东西吧,和大家共勉。相信 Linux 程序员都用过 Pthread, 但有了 C++11 的 std::thr转载 2017-02-27 10:38:46 · 845 阅读 · 0 评论 -
Linux C pipe函数 man 翻译
Linux C pipe函数 man 翻译翻译 2015-09-24 16:19:11 · 1207 阅读 · 0 评论 -
设计模式——策略模式(Strategy)
定义好各个阶段的工作,然后按流程去走。举一个例子:文件操作有:打开,处理,关闭。文件操作流程:打开——>处理——>关闭CFileContext:操作的控制控制类#include "IStrategy.h"class CFileContext{public: CFileContext(IStrategy* strategy); ~CFileContext(原创 2013-11-04 20:44:35 · 1192 阅读 · 0 评论 -
Android Native/Tombstone Crash Log 详细分析
Android 虽然已经有好几年了,但是NDK的开放速度却非常缓慢,所以目前网络上针对对Android NativeCrash的分析说明还比较少,尤其是非常详细的分析方式更难以查询。因此大部分程序员在遇到难以进行addr2line的crashlog时,会一筹莫展。事实上这份log中的其他部分同样提供了非常丰富的信息可供解读,所以在这里总结一下对在这方面的一些经验,在这里以Androidsample转载 2015-09-16 18:23:16 · 3118 阅读 · 0 评论 -
Source Insight使用配置
一.Options->DocumentOptions1.Document Type& File FilterDocument TypeFile FilterC Source File*.h;*.c;*.m;*.pchC++ Source File*.cpp;*.hpp;*.cxx;*.hxx转载 2015-07-23 10:51:15 · 1788 阅读 · 0 评论 -
source insight中文注释乱码问题的解决方案
最近使用source insight查看一些开源代码,显示中文就乱码,据说是因为source insight不支持utf-8编码,默认编码方式为ANSI码。所以需要将utf-8等非ANSI码的文件转换成source insight默认支持的ANSI码格式才能显示中文不乱码。 解决方案如下:一、单个文件转换对于单个文件,好说,只要将非ANSI码格式的文件转换成ANSI码格转载 2015-02-13 17:28:36 · 2021 阅读 · 0 评论 -
makefile赋值(:= ?= += =)
在Makefile中我们经常看到 = := ?= +=这几个赋值运算符,那么他们有什么区别呢?我们来做个简单的实验新建一个Makefile,内容为:ifdef DEFINE_VRE VRE = “Hello World!”elseendififeq ($(OPT),define) VRE ?= “Hello World! First!”endif转载 2014-07-31 15:08:36 · 1184 阅读 · 0 评论 -
open和fopen的区别
1.缓冲文件系统缓冲文件系统的特点是:在内存开辟一个“缓冲区”,为程序中的每一个文件使用,当执行读文件的操作时,从磁盘文件将数据先读入内存“缓冲区”, 装满后再从内存“缓冲区”依此读入接收的变量。执行写文件的操作时,先将数据写入内存“缓冲区”,待内存“缓冲区”装满后再写入文件。由此可以看出,内存 “缓冲区”的大小,影响着实际操作外存的次数,内存“缓冲区”越大,则操作外存的次数就少,执行速度就快转载 2014-07-10 15:34:34 · 933 阅读 · 0 评论 -
Linux 线程(1)线程创建
1. 线程2.原创 2014-05-23 11:42:19 · 1227 阅读 · 0 评论 -
Unix/Linux时间函数和日历函数
Unix/Linux都是采用UTC(Universal Coordinated Time),1970.1.1到现在的秒数,采用time_t(long int)存储1. 时间结构体都是定义在time.h头文件中时间:time_t, timeval, time_spec, 精度越来越高日历:tm1.1 time_ttypedef long time_ttime_t表原创 2013-11-21 15:20:51 · 1982 阅读 · 0 评论 -
Linux select使用与分析
Select在Socket编程中还是比较重要的,可是对于初学Socket的人来说都不太爱用Select写程序,他们只是习惯写诸如connect、accept、recv或recvfrom这样的阻塞程序(所谓阻塞方式block,顾名思义,就是进程或是线程执行到这些函数时必须等待某个事件的发生,如果事件没有发生,进程或线程就被阻塞,函数不能立即返回)。可是使用Select就可以完成非阻塞(所转载 2014-05-23 14:15:14 · 1133 阅读 · 0 评论 -
Linux 添加C++ Man
使用Linux下man已经很久了。但只是大概知道其内容的存放目录,以及man number xxx中mumber的含义。今天需要添加C++ man page。顺便将man的内容作一个较详细的了解。 0. man后面数字的含义:之前Sam在查找C库函数时,会使用#man 3 func在查找系统调用时,则使用#man 2 fork.否则有时会出现查到同名的she转载 2014-05-15 10:58:25 · 1348 阅读 · 0 评论 -
C函数的实现(strcpy,atoi,atof,itoa,reverse)
在笔试面试中经常会遇到让你实现C语言中的一些函数比如strcpy,atoi等1. atoi把字符串s转换成数字int Atoi( char *s ){ int num = 0, i = 0; int sign = 1; for( i=0; isspace(s[i]); i++ ); sign = (s[i] == '-')? -1:1; if( s[原创 2013-09-26 10:46:27 · 2471 阅读 · 0 评论 -
仿C++ STL vector
通过对C++STL vector的分析,自己写了一个简单的Vector,作为学习用。1. Vector的特点:vector也就是顺序列表,是用类表示一维数组。(1)随机存取(2)在中间插入,删除操作比较麻烦,因为需要移动后面的数据。2. Vector ADT(1)属性size: Vector 中有元素个数capacity:Vector中可原创 2013-06-15 10:25:20 · 1784 阅读 · 0 评论 -
前K项最小值
1. 问题描述从一些数据中找到前K个最小值。Data = {a1, a2, a3, a4........, an}Min = {ai1, ai2, ..... aik}2. 问题分析求前K项最小值有几种方法如下:(1)对数据排序,然后找到前K个最小值——效率太低(2)采用快排的Partition方法,Partition就是选择一个数据,然后用这个值把数组分原创 2013-06-10 13:18:42 · 1349 阅读 · 0 评论 -
list反转
1. 问题描述已知1个List: 1->2->3->4->5;要求把List反转变为:5->4->3->2->1。2. 问题分析问题很简单,新创建一个list:(1)从List中取首元素l;(2)把这个元素l,按照前插法插入到list中(3)重复(1)(2),直到List中没有元素3. 算法实现List* ReverseList(List *list){原创 2013-06-08 17:16:23 · 2185 阅读 · 1 评论 -
What are TCHAR, WCHAR, LPSTR, LPWSTR, LPCTSTR (etc.)?
Many C++ Windows programmers getconfused over what bizarre identifierslike TCHAR,LPCTSTR are.In this article, I would attempt by best to clear out thefog.In general, a character can be represent转载 2013-05-27 10:47:31 · 1113 阅读 · 0 评论