c++
文章平均质量分 66
zccracker
这个作者很懒,什么都没留下…
展开
-
如何限制对象只能建立在堆上或者栈上
在C++中,类的对象建立分为两种,一种是静态建立,如A a;另一种是动态建立,如A* ptr=new A;这两种方式是有区别的。 静态建立一个类对象,是由编译器为对象在栈空间中分配内存,是通过直接移动栈顶指针,挪出适当的空间,然后在这片内存空间上调用构造函数形成一个栈对象。使用这种方法,直接调用类的构造函数。 动态建立类对象,是使用new运算符将对象建立转载 2014-07-11 11:44:11 · 339 阅读 · 0 评论 -
g++参数介绍
[介绍] gcc and g++分别是gnu的c & c++编译器 gcc/g++在执行编译工作的时候,总共需要4步 1.预处理,生成.i的文件 预处理器cpp2.将预处理后的文件不转换成汇编语言,生成文件.s 编译器egcs3.有汇编变为目标代码(机器代码)生成.o的文件 汇编器as4.连接目标代码,生成可执行程序转载 2015-01-22 16:04:44 · 370 阅读 · 0 评论 -
静态库和动态库创建过程
libtest/include/hello.h #ifdef _HELLO_H_#define _HELLO_H_void hello();#endiflibtest/lib/hello.c#include "hello.h"#include void hello(){ printf("hello world!\n");}libtest/sr转载 2015-01-22 16:06:32 · 421 阅读 · 0 评论 -
关于gcc心得
1、如果h头文件中有实现代码,那么不需要进行gcc编译操作。2、h头文件中有实现代码(A.h)时,include它的cpp(B.cpp)如果进行gcc -c 操作时,生成的o文件中会包含A.h中的实现代码。3、如果A.h中有实现代码,如果B.cpp 包含A.h ,同时C.cpp包含A.h。如果将B.cpp和C.cpp链接到一起,将会有符合多次定义错误。原因是生成的B.o中有A.h的实现原创 2015-01-23 10:50:09 · 454 阅读 · 0 评论 -
gcc 编译过程
一、 C语言编译过程C语言的编译过程可分为四个阶段:1、预处理(Preprocessing)对源程序中的伪指令(即以#开头的指令)和特殊符号进行处理的过程。伪指令包括:1)宏定义指令; 2)条件编译指令; 3)头文件包含指令;2、编译(Compilation)编译就是将源程序转换为计算机可以执行的二进制代码。原创 2015-04-23 10:33:33 · 380 阅读 · 0 评论 -
ffmpeg编译过程
1、安装ffmpeg./configure --enable-shared --enable-pthreads --disable-yasmmake && make install2、测试程序#include "libavformat/avformat.h"#include "libavcodec/avcodec.h"#include "libavutil/avutil.h原创 2015-04-23 10:59:54 · 439 阅读 · 0 评论 -
ffmpeg只转封装不转码的代码实现
在有些场景下,其实只需要转封装,不需要转码,大概步骤如下:1. 打开输入的formatcontext2. 打开输出文件3. 打开输出的formatcontext4. 写文件头5. 复制codec信息6. 读取输入frame7. 写输出frame8. 写文件尾9. 关闭输出文件代码如下:#include stdio.转载 2015-04-27 11:25:03 · 1257 阅读 · 0 评论 -
关键帧切割视频
#include #include #include "libavformat/avformat.h"#include "libavcodec/avcodec.h"#include "libavutil/avutil.h"#include "libavutil/rational.h"#include "libavutil/mathematics.h"#include "libswsc原创 2015-05-05 15:52:09 · 1012 阅读 · 0 评论 -
linux定时器总结
1 参考资料Ø http://www.ibm.com/developerworks/cn/linux/1307_liuming_linuxtime1/Ø 《linux系统编程》第“10.9 定时器”章节2 概要要在linux中使用定时器,有如下三种方法:定时器方式一个进程允许使用的数量通知方转载 2016-03-02 16:45:47 · 515 阅读 · 0 评论 -
sem_timedwait的用法
#include int sem_timedwait(sem_t *sem, const struct timespec *abs_timeout); Link with -pthread. 对于这个函数,主要在于abs_timeout这个参数。一开始我以为是传入需要等待的时间。像这样:struct timespec ts;ts.tv_ns转载 2016-05-16 14:33:48 · 4133 阅读 · 0 评论 -
移植samba到安卓
一、交叉编译环境1、安装arm-linux-gcc编译工具2、安装步骤1、将压缩包arm-linux-gcc-4.4.3.tar.gz存放在一个目录下。2、使用tar命令:tar zxvf arm-gcc-4.4.3.tar.gz将software文件夹下的arm-linux-gcc-4.4.3.tar.gz解压缩3、接下来配置系统环境变量,把交叉编译工具链的路径添原创 2016-05-19 18:06:06 · 2742 阅读 · 0 评论 -
static_cast 和 reinterpret_cast
>C/C++是强类型语言,不同类型之间的相互转换是比较麻烦的.但是在编程实践中,不可避免的要用到类型转换.有2中类型转换:隐式类型转换和强制类型转换.1.隐式类型转换1.1 提升精度,此种是编译器自动完成的,安全的.所以编译的时候不会有任何错误或者警告信息提示.示例: > P147int ival = 3;double dval = 3.14159;转载 2016-12-22 14:22:41 · 266 阅读 · 0 评论 -
一读一写情况下,无锁环形队列如何实现?
无锁环形队列的设计及示例,读写队列最大的应用是:一个线程收到事件或消息后直接加入到队列,而处理线程读取队列中的事件或消息,并加以处理。在这个模式中,有一个线程负责写,多个处理线程读自己的队列并处理。虽然看起来象是一写多读,其实不然,针对某一事件队列而言,只有一个线程是写一个线程是读。 环形一读一写队列中,不需要担心unsigned long溢出问题,因为溢出后自动回归,相减转载 2017-01-13 14:04:31 · 1589 阅读 · 1 评论 -
图像处理之老照片特效
1. 首先对图像重新计算RGB值,计算公式如下:int fr= (int)(((double)tr * 0.393) + ((double)tg * 0.769) + ((double)tb * 0.189)); int fg = (int)(((double)tr * 0.349) + ((double)tg * 0.686) + ((double)tb * 0.168)); in转载 2015-02-06 20:10:29 · 373 阅读 · 0 评论 -
图像滤镜处理算法:灰度、黑白、底片、浮雕
下面介绍几种简单的图片处理算法,通过这几种算法,也能大致明白滤镜处理的算法原理。1 灰度图片前文阐述过关于图片的一些基本知识,彩色照片有RGB_8888、RGB_4444、RGB_565这么几种,每一个像素的颜色值由红、绿、蓝三种值混合而成,红绿蓝的取值分别由很多种,于是像素的颜色值也可以有很多种颜色值,这就是彩色图片的原理,而灰度照片则只有256种颜色,一般的处理方法是将图片颜色转载 2015-02-06 14:01:12 · 608 阅读 · 0 评论 -
fork的问题
题目:请问下面的程序一共输出多少个“-”??1234567891011121314#include #include #include intmain(vo转载 2014-08-28 14:44:32 · 346 阅读 · 0 评论 -
关于 多进程epoll 与 “惊群”问题
【遇到问题】 手头原来有一个单进程的linux epoll服务器程序,近来希望将它改写成多进程版本,主要原因有:在服务高峰期间 并发的 网络请求非常海量,目前的单进程版本的程序有点吃不消:单进程时只有一个循环先后处理epoll_wait()到的事件,使得某些不幸排队靠后的socket fd的网络事件处理不及时(担心有些socket客户端等不耐烦而超时断开);希望充分利用到服务转载 2014-09-02 10:50:33 · 305 阅读 · 0 评论 -
魔兽哈希算法
///////////////////////////////////////////////////////////////////////////// // Name: HashAlgo.cpp // Purpose: 使用魔兽Hash算法,实现索引表的填充和查找功能。 /////////////////////////////////////////////转载 2014-09-26 18:08:09 · 1571 阅读 · 0 评论 -
哈希树(HashTree)
作者 罗堃(此文为原创,若需要引用请注明出处)从2000年开始,作者开始研究基于TCP/IP的短信息传输技术。这种技术目前在国际上的标准被成为SMPP(Short Message Peer to Peer Protocol)。SMPP协议是一种支持异步传输模式(Asynchronized Transmission Mode)的信息传输方式。这种异步方式主要体现在两个地方:传转载 2014-11-12 18:02:06 · 7379 阅读 · 0 评论 -
Merkle Hashing Tree
大家都知道,目前BT应用的发展具有一个非常显著的趋势,那就是用来交换电影、游戏、ISO等大尺寸的数据文件。然而我们也能够观察到另一个事实,那就是:下载文件所对应的索引文件(.torrent)也越来越大,越来越难以下载;这是因为在索引文件中保存了被下载文件中所有数据块的20字节SHA1校验值,而文件越大,数据块越多,则.torrent文件越长(块数=文件长度/数据块长,Bit Torrent标准协议转载 2014-11-13 10:36:30 · 1868 阅读 · 0 评论 -
穿越NAT的p2p通信方法研究
内容概述:在p2p通信领域中,由NAT(Network Address Translation,网络地址转换)引起的问题已经众所周知了,它会导致在NAT内部的p2p客户端在无论以何种有效的公网ip都无法访问的问题。虽然目前已经发展出多种穿越NAT的技术,但相关的技术文档却很少,用来证明这些技术的稳定性和优点的实际数据更少。本文的目的在于描述和分析在实际中运用得最广泛、最可靠同时转载 2014-10-31 10:50:40 · 467 阅读 · 0 评论 -
Makefile相关
七、静态模式静态模式可以更加容易地定义多目标的规则,可以让我们的规则变得更加的有弹性和灵活。我们还是先来看一下语法: ;: ;: ; ; ... targets定义了一系列的目标文件,可以有通配符。是目标的一个集合。 target-parrtern是指明了targets的模式,也就是的目标集模式。 pr原创 2015-01-28 14:45:05 · 313 阅读 · 0 评论 -
H264 获取SPS与PPS(附源码)
在用Android手机进行h264硬编码的时候如果要进行视频流的实时传输与播放,就需要知道视频流的Sequence Parameter Sets (SPS) 和Picture Parameter Set (PPS)。今天算是看明白如何获取SPS和PPS,在这里记录下来,希望有需要的朋友可以在这里获取到一些些的帮助。首先说一下大前提,我设置的视频录制参数为:mMediaRec转载 2014-12-19 16:19:45 · 396 阅读 · 0 评论 -
移位运算
负数>>运算补1原创 2015-01-13 16:16:13 · 397 阅读 · 0 评论 -
c++中new的三种用法详细解析
一. 简介new有三种使用方式:plain new,nothrow new和placement new。(1)plain new顾名思义就是普通的new,就是我们惯常使用的new。在C++中是这样定义的: void* operator new(std::size_t) throw(std::bad_alloc); void operator delete(void转载 2015-01-15 14:46:01 · 2432 阅读 · 0 评论 -
图像滤镜处理算法:柔化、光照、放大镜、哈哈镜
1 柔化算法柔化算法的效果是让图片的每一个点与周围点的颜色更平滑,算法原理很简单,就是针对每一个像素,将其颜色值置为周围8个点加上自身的RGB的平均值。不过这样处理后的效果不是很明显,可以采用高斯模糊算法,能获取更好的效果。原图如下:采用平均值法的柔化算法处理结果如下:2 光照有时需要在照片中增加一个光源这样的效果,如何实现呢?首先我们设定一转载 2015-02-06 20:08:15 · 2325 阅读 · 0 评论 -
除数为2的N次方取模可以用与运算替代,效率更高
取模运算在包括JAVA在内的大多数语言中的效率都十分低下,而当除数为2的N次方时,取模运算将退化为最简单的位运算,其效率明显提升(按照Bruce Eckel给出的数据,大约可以提升5~8倍) 。看看JDK中是如何实现的: Java代码:static int indexFor(int h, int length) { return h & (lengt转载 2017-01-12 16:00:54 · 2927 阅读 · 0 评论