size_t

iOS加解密最重要的干货:CCCrypt

大兔子大兔子 提交于 2019-11-28 20:07:20
需要引入框架 #import <CommonCrypto/CommonCryptor.h> 函数定义: CCCryptorStatus CCCrypt( CCOperation op, /* kCCEncrypt, etc. */ CCAlgorithm alg, /* kCCAlgorithmAES128, etc. */ CCOptions options, /* kCCOptionPKCS7Padding, etc. */ const void *key, size_t keyLength, const void *iv, /* optional initialization vector */ const void *dataIn, /* optional per op and alg */ size_t dataInLength, void *dataOut, /* data RETURNED here */ size_t dataOutAvailable, size_t *dataOutMoved) 下面就跟我一起探秘CCCrypt吧 函数介绍 @function CCCrypt @abstract Stateless, one-shot encrypt or decrypt operation. This basically performs a sequence

Redis 内存管理 源码分析

拥有回忆 提交于 2019-11-27 10:34:18
要想了解redis底层的内存管理是如何进行的,直接看源码绝对是一个很好的选择 下面是我添加了详细注释的源码,需要注意的是,为了便于源码分析,我把redis为了弥补平台差异的那部分代码删了,只需要知道有这个东西便好 下面我会贴上两份源码:一份是我自己的,有删减添加了注释的,一部分是原生的,可以做个参考对照 redis内存管理部分的源码在 zmalloc.h文件和zmalloc.c文件 推荐文章: https://www.cnblogs.com/likui360/p/5272443.html https://www.cnblogs.com/likui360/p/5272975.html http://wiki.jikexueyuan.com/project/redis/memory-data-management.html 我的源码 zmalloc.h: #ifndef __ZMALLOC_H #define __ZMALLOC_H #define __xstr(s) __str(s) #define __str(s) #s #ifndef ZMALLOC_LIB #define ZMALLOC_LIB "libc" #endif /* CPU一次性能读取数据的二进制位数称为字长,也就是我们通常所说的32位系统(字长4个字节)、64位系统(字长8个字节)的由来。 所谓的8字节对齐

BloomFilter(布隆过滤器)

妖精的绣舞 提交于 2019-11-27 08:16:00
原文链接 : http://blog.csdn.net/qq_38646470/article/details/79431659 1.概念: 如果想判断一个元素是不是在一个集合里,一般想到的是将所有元素保存起来,然后通过比较确定。链表,树等等数据结构都是这种思路. 但是随着集合中元素的增加,我们需要的存储空间越来越大,检索速度也越来越慢。不过世界上还有一种叫作散列表(又叫哈希表,Hash table)的数据结构。它可以通过一个Hash函数将一个元素映射成一个位阵列(Bit Array)中的一个点。这样一来,我们只要看看这个点是不是 1 就知道可以集合中有没有它了。这就是布隆过滤器的基本思想。 它的优点 是空间效率和查询时间都远远超过一般的算法, 缺点 是有一定的误识别率(假正例False positives,即Bloom Filter报告某一元素存在于某集合中,但是实际上该元素并不在集合中)和删除困难,但是没有识别错误的情形(即假反例False negatives,如果某个元素确实没有在该集合中,那么Bloom Filter 是不会报告该元素存在于集合中的,所以不会漏报)。 2.实现原理: 直观的说,bloom算法类似一个hash set,用来判断某个元素(key)是否在某个集合中。和一般的hash set不同的是,这个算法无需存储key的值,对于每个key,只需要k个比特位

SGI STL内存管理

随声附和 提交于 2019-11-26 20:17:18
SGI STL内存管理 在SGI STL版本的内存管理中,使用这样一种方式来分配内存: 内存分配+对象初始化 。首先是分配内存,其次是根据对象的类型(是否为POD【Plain of Data】)来使用最有效的方式来初始化对象。回收内存也是用同样的方式: 析构对象+回收内存 ,根据对象是否为POD类型,确定最有效的析构方式。 SGI STL使用双层级配置器,第一级配置器直接使用 malloc()和free() ,第二级根据如下策略:当配置区块>128 Bytes时,视之为“足够大”,调用一级配置器,否则视之为过小,调用二级配置器。 一级配置器:__malloc_alloc_template template <int __inst> //非型别参数,没排上用处 class __malloc_alloc_template { private: static void* _S_oom_malloc(size_t); //用来处理内存不足的情况,out of memory static void* _S_oom_realloc(void*, size_t); static void (* __malloc_alloc_oom_handler)(); public: static void* allocate(size_t __n) //分配内存 { void* __result =

C++ new 解析重载 【转】

一曲冷凌霜 提交于 2019-11-26 18:31:25
原文: http://www.cnblogs.com/zhoug2020/archive/2012/04/06/2434139.html C++ new用法之一 new运算符 最常用的是作为运算符的new,比如: string *str = new string(“test new”); 作为运算符,new和sizeof一样,是C++内置的,你不能对它做任何的改变,除了使用它。 new会在堆上分配一块内存,并会自动调用类的构造函数。 C++ new用法之二 new函数 第二种就是new函数,其实new运算符内部分配内存使用的就是new函数,原型是: void *operator new(size_t size); new函数返回的是一个void指针,一块未经初始化的内存。如你所见,这和C语言的malloc行为相似,你可以重载new函数,并且增加额外的参数,但是必须保证第一个参数必须是size_t类型,它指明了分配内存块的大小,C++允许你这么做,当然一般情况下这是不必要的。如果重载了new函数,在使用new操作符时调用的就是你重载后的new函数了。 如果使用new函数,和语句string *str = new string(“test new”)相对的代码大概是如下的样子: string * str = (string*)operator new(sizeof(string));

写线程池的几个小bug注意

孤街醉人 提交于 2019-11-26 11:09:48
初始化『()』不能随便用,如果这个类用默认形参的构造函数,或者没有形参,那就不要加括号初始化,特别是当存在默认形参情况,它会默认你加的是『0』的形参 ··· Threadpool(size_t threadNum = 4,size_t queSize = 10); ··· 如果构造类的时候价括号,会报错 ··· int main() Threadpool threadpool();//这个构造有问题 threadpool.start(); ··· error: request for member ‘start’ in ‘threadpool’, which is of non-class type ‘wd::Threadpool()’ threadpool.start(); 头文件和源文件尽量分开,如果在源文件中写了一些函数实现,务必保证必要的声明,一般的引用只要前置声明就行不需要头文件,但是比如构造函数在头文件,就需要保证头文件 include "TaskQueue.h" include "Thread.h" //构造函数中,_threads隐藏了vector的构造,这时候只前置声明 『class Thread』是不够的,此时要创建Thread,但是没有头文件,无法创建 include include using std::vector; using std::unique

Android7.1 [Camera] CameraService启动源代码分析

ぃ、小莉子 提交于 2019-11-26 08:25:07
源码平台:rk3399 摘要: 1.拷贝cameraserver.rc编译拷贝到system/etc/init目录 2.启动cameraserver服务 摘要1:cameraserver.rc编译拷贝到system/etc/init目录 android 系统启动完bootloader后,会启动内核,内核启动完后,会启动文件系统,很多服务也是在这时候启动起来,CameraService的启动在frameworks/av/camera/cameraserver/cameraserver.rc文件 service cameraserver /system/bin/cameraserver class main user cameraserver group audio camera input drmrpc readproc ioprio rt 4 writepid /dev/cpuset/camera-daemon/tasks /dev/stune/top-app/tasks 这个文件会在Android.mk文件里面编译到指定位置: LOCAL_PATH:= $(call my-dir) include $(CLEAR_VARS) LOCAL_SRC_FILES:= \ main_cameraserver.cpp LOCAL_SHARED_LIBRARIES := \

STL hash function的模板特化

落爺英雄遲暮 提交于 2019-11-25 23:42:52
哈希函数的作用是将一个值映射为一个哈希值,从而根据这个哈希值,在哈希表中对数据进行定位。 template <class _Val, class _Key, class _HashFcn, class _ExtractKey, class _EqualKey, class _Alloc = alloc> class hashtable; STL中定义的hashtable容器包含哈希函数模板参数_HashFcn。_HashFcn既然是一个类类型,又能提供函数的功能,因此是一种仿函数(functor); 仿函数是一个类,在类中重载()运算符,从而由仿函数类对象即可实现函数功能。 在SGI-STL中的stl_hash_fun.h中定义了若干仿函数类: #ifndef __SGI_STL_HASH_FUN_H #define __SGI_STL_HASH_FUN_H #include <stddef.h> __STL_BEGIN_NAMESPACE template <class _Key> struct hash { }; inline size_t __stl_hash_string(const char* __s) { unsigned long __h = 0; for ( ; *__s; ++__s) __h = 5*__h + *__s; return size_t(__h);