
C/C++
GoRustNeverStop
这个作者很懒,什么都没留下…
展开
-
程序的编译、链接与装载
《程序员的自我修养-链接装载与库》是一本值得推荐的书,主要介绍系统软件的运行机制和原理,涉及在Windows和Linux两个系统平台上,一个应用程序在编译、链接和运行时刻所发生的各种事项,包括:代码指令是如何保存的,库文件如何与应用程序代码静态链接,应用程序如何被装载到内存中并开始运行,动态链接如何实现,C/C++运行库的工作原理,以及操作系统提供的系统服务是如何被调用的。本文主要对书中涉及L转载 2016-07-28 16:12:25 · 4679 阅读 · 0 评论 -
对内存对齐的深一步理解
接触内存对齐这个概念,也有三四年了。不过由于我工作后一直做游戏服务器,都是在x86架构的机子上写代码,也没怎么注意内存对齐。使用最多的估计也就是面试时经常问结构体大小。最近在写自己服务器框架的二进流读写模块时,整理了下这方面的内容。本方不会涉及基本概念。 内存对齐只是指数据存储在内存时的起始地址是否是某个值的整数倍。如果只是放在内存中,是否对齐本身并没有什么问题。问题是读取、写入的时候。转载 2016-08-05 14:17:51 · 3476 阅读 · 0 评论 -
内存管理机制(详细介绍)
(一):进程空间在编程中,很多Windows或C++的内存函数不知道有什么区别,更别谈有效使用;根本的原因是,没有清楚的理解操作系统的内存管理机制,本文企图通过简单的总结描述,结合实例来阐明这个机制。本文目的:对Windows内存管理机制了解清楚,有效的利用C++内存函数管理和使用内存。本文内容:本文一共有六节,由于篇幅较多,故按节发表。其他章节请看本人博客转载 2016-08-05 15:05:13 · 1636 阅读 · 0 评论 -
const实现机制
const的实现机制const究竟是如何实现的呢?对于声明为const的内置类型,例如int,short,long等等,编译器会如何实现const的本意?那么对于非内置类型是否也是与内置数据类型一样处理呢,例如对于结构体类型则会怎样处理呢?下面通过几个小例子来说明这些问题:C语言const示例:const int i=10;int *p=(int *)(&i);*p转载 2016-08-02 22:43:27 · 2570 阅读 · 0 评论 -
进程地址空间分布
转载请注明出处:http://blog.youkuaiyun.com/wangxiaolong_china 对于一个进程,其空间分布如下图所示:C程序一般分为:1.程序段:程序段为程序代码在内存中的映射.一个程序可以在内存中多有个副本.2.初始化过的数据:在程序运行值初已经对变量进行初始化的3.未初始化过的数据:在程序运行初未对变量进行初始化转载 2016-08-18 10:49:21 · 4256 阅读 · 2 评论 -
Listen第二个参数的意义
Listen第二个参数的意义 今天主要回顾下listen的第二个参数的意义。 话说现在现在都是用框架写业务代码。真的很少在去关注最基本的socket函数的意义了。该忘得都忘得差不多了。~~~ 要慢慢捡起来。 主要是在看redis网络这块的时候它的第二个参数设置的是500多。 而且突然想到当初几年前腾讯电话面试问过我第二个参数是什么意思。当时我一股脑就说成co转载 2016-08-18 11:31:16 · 1330 阅读 · 0 评论 -
C/C++笔试题(很多)
微软亚洲技术中心的面试题!!!1.进程和线程的差别。线程是指进程内的一个执行单元,也是进程内的可调度实体.与进程的区别:(1)调度:线程作为调度和分配的基本单位,进程作为拥有资源的基本单位(2)并发性:不仅进程之间可以并发执行,同一个进程的多个线程之间也可并发执行(3)拥有资源:进程是拥有资源的独立单位,线程不拥有系统资源,但可以访问隶属于进程的资源. (4转载 2016-08-29 11:47:44 · 76116 阅读 · 0 评论 -
单例模式及C++实现代码
单例模式单例模式,可以说设计模式中最常应用的一种模式了,据说也是面试官最喜欢的题目。但是如果没有学过设计模式的人,可能不会想到要去应用单例模式,面对单例模式适用的情况,可能会优先考虑使用全局或者静态变量的方式,这样比较简单,也是没学过设计模式的人所能想到的最简单的方式了。一般情况下,我们建立的一些类是属于工具性质的,基本不用存储太多的跟自身有关的数据,在这种情况下,每次都去new一转载 2016-08-31 00:10:32 · 572 阅读 · 0 评论 -
C++设计模式——单例模式
C++设计模式——单例模式2013-11-21 分类:C++ / 设计模式 阅读(5338)评论(78) 问题描述现在,不管开发一个多大的系统(至少我现在的部门是这样的),都会带一个日志功能;在实际开发过程中,会专门有一个日志模块,负责写日志,由于在系统的任何地方,我们都有可能要调用日志模块中的函数,进行写日志。那么,如何构造一个日志模块的实例呢?难道,每次new一个日志模块实转载 2016-08-31 00:12:24 · 367 阅读 · 0 评论 -
运算符重载(实现CString类)
private: char*m_pdate;public://构造函数CString::CString(){};//拷贝构造CString::CString(const CString& t_cstring){ if(m_pdate!=NULL) delete[]m_pdate;转载 2016-08-22 18:54:08 · 2163 阅读 · 1 评论 -
Epoll示例代码
#include #include #include #include #include #include #include #include #include #include #define MAXEVENTS 64static intmake_socket_non_blocking (int sfd){ int flags, s; flags = fc转载 2016-08-05 14:08:00 · 767 阅读 · 0 评论 -
Linux下C结构体初始化[总结]
1、前言 今天在公司看一同事写的代码,代码中用到了struct,初始化一个struct用的是乱序格式,如下代码所示:typedef struct _data_t { int a; int b;}data_t;data_t data = { .a = 10, .b = 20,}; 通常初始化一个结构体的方式是按序初始化,形转载 2016-07-22 08:59:56 · 1162 阅读 · 0 评论 -
函数调用过程探究
引言如何定义函数、调用函数,是每个程序员学习编程的入门课。调用函数(caller)向被调函数(callee)传入参数,被调函数返回结果,看似简单的过程,其实CPU和系统内核在背后做了很多工作。下面我们通过反汇编工具,来看函数调用的底层实现。 基础知识我们先来看几个概念,这有助于理解后面反汇编的输出结果。栈(stack)栈,相信大家都十分熟悉,push转载 2016-07-28 17:52:49 · 2753 阅读 · 0 评论 -
小例子一步一步解释“函数调用过程中栈的变化过程”
小例子一步一步解释“函数调用过程中栈的变化过程”1 问题描述 在此之前,我对C中函数调用过程中栈的变化,仅限于了解有好几种参数的入栈顺序,其中的按照形参逆序入栈是比较常见的,也仅限于了解到这个程度,但到底在一个函数A里面,调用另一个函数B的过程中,函数A的栈是怎么变化的,实参是怎么传给函数B的,函数B又是怎么给函数A返回值的,这些问题都不能很明白的一步一步解释出来。下转载 2016-07-28 17:53:21 · 2352 阅读 · 0 评论 -
Linux下C程序进程地址空间布局
今天我们将从进程地址空间中典型的存储区域分配情况开始讲起,然后顺序到Linux下C程序进程地址空间布局。AD: 51CTO 网+ 第十二期沙龙:大话数据之美_如何用数据驱动用户体验我们在学习C程序开发时经常会遇到一些概念:代码段、数据段、BSS段(Block Started by Symbol) 、堆(heap)和栈(stack)。先看一张教材上的示意图(来转载 2016-08-04 16:58:38 · 1066 阅读 · 0 评论 -
C++之stl::string写时拷贝导致的问题
前几天在开发某些数据结构到文件的 Dump 和 Load 功能的时候, 遇到的一个 bug 。【问题复现】问题主要出在 Load 过程中,从文件读取数据的时候, 直接使用 fread 的去操作 string 的内部指针地址 (char*)s.c_str() 。 简化后的示例代码如下( testdata1 文件内容是12345):void Load(string& s, size转载 2016-08-04 19:10:14 · 2666 阅读 · 0 评论 -
深入剖析 linux GCC 4.4 的 STL string
深入剖析 linux GCC 4.4 的 STL stringPosted on 2012 年 11 月 26 日 by zieckey本文通过研究STL源码来剖析C++中标准模板块库std::string运行机理,重点研究了其中的引用计数和Copy-On-Write技术。平台:x86_64-redhat-linuxgcc version 4.4.6 20110731 (Red转载 2016-08-04 19:11:40 · 1905 阅读 · 0 评论 -
c++避免内存泄漏
一旦将c++用的十分纯熟了,忘掉了c++里的各种“特性”,避免接近很多"坑",会发现c++其实还是有很多优点的,比如避免内存泄漏。 我们发送消息的代码在c语言中常常这样写Message* m=CreateMessage();SendMessage(m);如果在上述两句之间有很多代码,一不小心就会有内存泄漏。ps:很多c++程序也是这样写的,其实没有领悟转载 2016-08-04 19:21:45 · 1716 阅读 · 0 评论 -
C++基础知识汇总
C++面试题——基础概念篇唐璐http://blog.youkuaiyun.com/worldwindjp/ 面试C++程序员的时候一般都是3板斧,先是基础问答,然后一顿虚函数、虚函数表、纯虚函数、抽象类、虚函数和析构函数、虚函数和构造函数。接着拷贝构造函数、操作符重载、下面是STL,最后是智能指针。 都能挺过去那基本知识这关应该算是过了,下面就是项目转载 2016-08-01 20:59:57 · 4407 阅读 · 0 评论 -
C++STL常见面试题
1.C++ STL 之所以得到广泛的赞誉,也被很多人使用,不只是提供了像vector, string, list等方便的容器,更重要的是STL封装了许多复杂的数据结构算法和大量常用数据结构操作。vector封装数组,list封装了链表,map和set封装了二叉树等2.标准关联容器set, multiset, map, multimap内部采用的就是一种非常高效的平衡检索二叉树:红黑树,也成转载 2016-08-01 21:07:32 · 21502 阅读 · 0 评论 -
C语言变长数组data[0]【总结】
1、前言 今天在看代码中遇到一个结构中包含char data[0],第一次见到时感觉很奇怪,数组的长度怎么可以为零呢?于是上网搜索一下这样的用法的目的,发现在linux内核中,结构体中经常用到data[0]。这样设计的目的是让数组长度是可变的,根据需要进行分配。方便操作,节省空间。2、data[0]结构经常遇到的结构形状如下:struct buffer转载 2016-07-22 08:58:15 · 1137 阅读 · 0 评论 -
C++11新特性参考
C++11新特性参考资料原创 2016-08-23 00:08:36 · 579 阅读 · 0 评论 -
C++开发者都应该使用的10个C++11特性
在C++11新标准中,语言本身和标准库都增加了很多新内容,本文只涉及了一些皮毛。不过我相信这些新特性当中有一些,应该成为所有C++开发者的常规装备。你也许看到过许多类似介绍各种C++11特性的文章。下面是我总结的,C++开发者都需要学习和使用的C++11新特性。 auto在C++11之前,auto关键字用来指定存储期。在新标准中,它的功能变为类型推断。auto现在成了一个类转载 2016-08-23 00:17:23 · 1011 阅读 · 0 评论 -
C/C++中extern关键字详解
1 基本解释:extern可以置于变量或者函数前,以标示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义。此外extern也可用来进行链接指定。 也就是说extern有两个作用,第一个,当它与"C"一起连用时,如: extern "C" void fun(int a, int b);则告诉编译器在编译fun这个函数名时按着C的规则去翻译相应的函数转载 2016-08-15 14:28:52 · 450 阅读 · 0 评论 -
C++文件读写详解(ofstream,ifstream,fstream)
在看C++编程思想中,每个练习基本都是使用ofstream,ifstream,fstream,以前粗略知道其用法和含义,在看了几位大牛的博文后,进行整理和总结:这里主要是讨论fstream的内容:[java] view plain copy print?#include ofstream //文转载 2017-06-22 16:10:25 · 515 阅读 · 0 评论 -
c++中ifstream一次读取整个文件
c++中一次读取整个文件的内容的方法:读取至char*的情况std::ifstream t; int length; t.open("file.txt"); // open input file t.seekg(0, std::ios::end); // go to the end length = t.tellg(); // r转载 2017-06-23 15:25:51 · 1336 阅读 · 0 评论 -
std::ios_base::ios_base(const std::ios_base&)' is private 错误
代码如下:inline ostream operator{ return os} 编译它出现:std::ios_base::ios_base(const std::ios_base&)' is private 错误。这是因为流作为参数传递时必须通过引用传递,所以正确的代码是 inline ostream& operator& os, const istri转载 2017-06-24 11:32:01 · 3014 阅读 · 0 评论 -
二进制值和十六进制字符串相互转换的C++代码
#include #include #include using namespace std;string BinToHex(const string &strBin, bool bIsUpper = false){ string strHex; strHex.resize(strBin.size() * 2); for (size转载 2017-07-18 17:12:49 · 4954 阅读 · 3 评论 -
malloc,ralloc,calloc工作原理及其区别
首先要了解C语言跟内存分配方式c语言内存有4G空间,其中1G分配给内核,3G分配给用户,其中3G空间又划分为栈空间,堆空间,数据段以及代码段,下面先说下各个空间各自的存储内容 (1)数据段。里面包括bss(保存为初始化的全局变量),rodata(保存常量),.data(静态数据区,里面全局变量,static修饰变量)。 内存在程序转载 2017-07-28 11:28:28 · 654 阅读 · 0 评论 -
C/C++ 程序内存结构
http://blog.youkuaiyun.com/ufolr/article/details/52833736楔子一个可执行程序文件需要在计算机硬件上运行起来,其实质就是静态的文件被加载到内存中的过程,可执行程序文件只是一个程序的载体。那么执行一个应用后,它在内存中是一个怎样的结构呢,请关注今天的走进科学——《C/C++ 程序内存结构》。动&静一个程序被加载到内转载 2017-12-12 09:46:07 · 825 阅读 · 0 评论 -
堆和栈的区别
一、预备知识—程序的内存分配 一个由C/C++编译的程序占用的内存分为以下几个部分 1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其 操作方式类似于数据结构中的栈。 2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回 收 。注意它与数据结构中的堆是两转载 2017-12-12 09:48:01 · 338 阅读 · 0 评论 -
KMP算法实现(我的理解实现)
#include <string>#include <iostream>#include <vector>using namespace std;class Solution {public: int kmp(string S, string T) { vector<int> next = cal_next(T); int k...原创 2018-03-31 14:41:00 · 335 阅读 · 0 评论 -
C++笔试题之String类的实现
这个在面试或笔试的时候常问到或考到。已知类String的原型为:[cpp] view plain copyclass String { public: String(const char *str = NULL);// 普通构造函数 String(const String &other);// 拷贝构造函数 ~String(void);// 析构函...转载 2018-04-02 16:07:53 · 574 阅读 · 0 评论 -
如何利用C/C++逐行读取txt文件中的字符串(可以顺便实现文本文件的复制)
如下代码均在Windows/VC++6.0下测试通过, 请一定注意Linux和Windows文件格式的区别 先用C语言写一个丑陋的程序:[cpp] view plain copy#include #include int main() { FILE *fp; if(NULL转载 2017-06-22 16:09:08 · 16675 阅读 · 1 评论 -
详解数据在内存中的真实存放次序:位序、字节序、大/小端模式与结构体、位域
http://blog.youkuaiyun.com/prograc/article/details/52666266计算机学科中的很多问题,都是因为概念的抽象模糊,导致理解上的不确定性,增加学习领悟的难度。对于计算机中数据存放次序的问题,很多教材或文章要么含糊其辞,要么凭空飞来结论,让人看的一头雾水。几经周折,结合多篇文章,对内存中数据存放次序终于有了较深入的理解,现记录如下:一转载 2017-04-26 09:32:05 · 6955 阅读 · 4 评论 -
has not been declared和does not name a type解决办法
最近做项目发现明明包含了头文件,但编译却提示如下错误src/SyncReceiver.h:58:15: error: ‘CoreCycle_t’ has not been declared bool Init(CoreCycle_t *pCoreCycle); ^src/SyncReceiver.h:71:5: error: ‘CoreCycle原创 2016-09-27 13:39:05 · 20774 阅读 · 1 评论 -
invalid use of incomplete type struct 或者是class的解决办法
常见问题一:invalid use of incomplete type出现这个问题,表明编译器不知道所用的struct 或者是class的具体实现,通常出现在如下情况:假设我们有一个class some定义在some.h中,实现在some.cpp中,我们在other.cpp中要用到这个some 的方法,于是我们再other.h中声明可一个class some,并声明了要用到的方法,这样就原创 2016-09-27 13:39:42 · 19468 阅读 · 0 评论 -
字符串中间断掉连接方法
如果是字符串中间断掉有两钟方法:第一种:printf( "hello""world" );第二种:printf( "hello\world" );(推荐用第一种,第二种从第二行的开头便算起,也就是空格都算。。。),其它的情况,随便怎么分开都行,只要不把标识符分开。。。如printf( "%d %d",x,y );原创 2016-10-20 15:33:26 · 659 阅读 · 0 评论 -
C++编程规范约定
前言 从小就写字很挫,所以受够了被人鄙视的感觉,今天有个coder突然跟我说,你的代码怎么像小孩写的一样,顿时心情沮丧的极点。越来越发现一致的编程风格的重要性,于是把Google的C++编程风格指南看了一遍, 这里记录下于自己有益的rules。当规则有多个选择时,这里只记录个人习惯的用法, 并不代表它是唯一的用法。 命名约定命名管理是最重要的一致转载 2017-02-07 15:13:08 · 1561 阅读 · 0 评论 -
C语言snprintf()函数:将格式化的数据写入字符串—sprintf()
snprintf()函数用于将格式化的数据写入字符串,其原型为: int snprintf(char *str, int n, char * format [, argument, ...]);【参数】str为要写入的字符串;n为要写入的字符的最大数目,超过n会被截断;format为格式化字符串,与printf()函数相同;argument为变量。【返回值】成功则返回参数转载 2017-02-17 11:19:21 · 4128 阅读 · 0 评论