size_t

STL之string的详细介绍

坚强是说给别人听的谎言 提交于 2020-01-20 01:24:35
什么是STL? STL(standard template libaray )标准模板库 是C++标准库的重要组成部分 不仅是一个可以复用的组件库 更是一个包罗数据结构算法的软件框架 以下是STL的六大组件 大概了解一下以后会详细介绍。 STL六大组件: 1.仿函数 如:greater less 2.算法 如:find swap reverse sort merge 3.迭代器 如:iterator const_iterator reverse_iterator const_reverse_iterator 4.空间配置器 如:allocator 5.容器 如:string vector list deque map set multimap mutilset 6.配接器 如:stack queue priority_queue 什么是string? string是表示 字符串的字符串类 该类的接口与常规容器的接口基本相同,再添加了一些专门用来操作string的常规操作。 string在底层实际是: basic_string 模板类的别名 ,typedef basic_string<char, char_traits, allocator> string; 不能操作多字节或者变长字符的序列。 在使用string类时必须包含头文件 <string> 以及 using

size_type 和 size_t 的区别

微笑、不失礼 提交于 2020-01-20 00:35:39
标准库string里面有个函数size,用来返回字符串中的字符个数,具体用法如下: string st("The expense of spirit\n"); cout << "The size of "<<st<<"is"<<st.size() << "characters, including the newline"<<endl; 那么size()这个函数返回的类型到底是什么呢?一定要记住,绝对不是整形,而是size_type类型的,所以千万不要把size的返回值赋给一个int变量。 那么size_type到底是一种什么样的类型呢? string类类型和许多其他库类型都定义了一些配套类型(companion type)。通过这些配套类型,库类型的使用就能与机器无关。size_type就是这些配套类型中的一种。 size_type被定义为与unsigned型(unsigned int, unsigned long)具有相同的含义,而且可以保证足够大能够存储任意string对象的长度。为而来使用由string类型定义的size_type类型。程序员必须加上作用于操作符来说明所使用的size_type类型是由string类定义的。 我们为什么不适用int变量来保存string的size呢? 使用int变量的问题是:有些机器上的int变量的表示范围太小

size_t类型

霸气de小男生 提交于 2020-01-20 00:33:51
size_t和ssize_t是ANSI C提供的标准头文件里定义的一个“数据类型”,其实并不是新的数据类型,不是关键字,是通过typedef从已有数据类型定义而来。 ANSI C总共提供了24个头文件,他们所处的目录因编译器而异,作者用的编译器是gcc4.3.2,大部分头文件在/usr/include目录下,但是定义size_t和ssize_t的头文件stddef.h则位于/usr/lib/gcc/i486-linux-gnu/4.3.2/include目录下,是这样定义的: #define __SIZE_TYPE long unsigned int ........................ typedef __SIZE_TYPE__ size_t; ......................... 即size_t实际上是无符号长整型,在32位系统上位32位,在64位系统中位64位。 size_t在C语言中就有了。 它是一种“整型”类型,里面保存的是一个整数,就像int, long那样。这种整数用来记录一个大小(size)。size_t的全称应该是size type,就是说“一种用来记录大小的数据类型”。 通常我们用sizeof(XXX)操作,这个操作所得到的结果就是size_t类型。 因为size_t类型的数据其实是保存了一个整数,所以它也可以做加减乘除

【C语言】字符串处理

落爺英雄遲暮 提交于 2020-01-17 07:44:08
文章目录 1、memchr 2、memcmp 3、memcpy 4、memmove 5、memset 6、strcat 7、strncat 8、strchr 9、strcmp 10、strncmp 11、strcoll 12、strcpy 13、strncpy 14、strcspn 15、strerror 16、strlen 17、strpbrk 18、strrchr 19、strspn 20、strstr 21、strtok 22、strxfrm 1、memchr void * memchr ( const void * str , int c , size_t n ) 在参数 str 所指向的字符串的前 n 个字节中搜索第一次出现字符 c(一个无符号字符)的位置。 2、memcmp int memcmp ( const void * str1 , const void * str2 , size_t n ) 3、memcpy void * memcpy ( void * dest , const void * src , size_t n ) 4、memmove void * memmove ( void * dest , const void * src , size_t n ) 另一个用于从 src 复制 n 个字符到 dest 的函数。 从 src 复制 n 个字符到

nginx 内存池

谁说我不能喝 提交于 2020-01-16 11:22:43
目录 简述 几种数据结构 对外的方法 总结 参考 https://www.cnblogs.com/xiekeli/archive/2012/10/17/2727432.html?tdsourcetag=s_pctim_aiomsg 源码版本 nginx-1.12.2 简述 nginx 是一个http , 反向代理等的服务器,以其高效,稳定,低内存闻名。最具特点的是它不是以线程方式处理请求,而是采用了一种事件驱动异步架构的方式。这也就要求 整个内存池可以看作是由一个个内存块组成的链表。 几种数据结构 对外的方法 ngx_pool_t *ngx_create_pool(size_t size, ngx_log_t *log);//创建内存池 void * ngx_palloc(ngx_pool_t *pool, size_t size);//内存申请(对齐) void * ngx_pnalloc(ngx_pool_t *pool, size_t size);//内存申请(不对齐) void * ngx_pcalloc(ngx_pool_t *pool, size_t size);//内存申请,并初始化为0 ngx_int_t ngx_pfree(ngx_pool_t *pool, void *p);//释放内存 void ngx_reset_pool(ngx_pool_t *pool)

Linux_基础I/O(一)

送分小仙女□ 提交于 2020-01-10 17:42:55
1、文件 程序文件:源程序文件、目标文件、可执行文件 数据文件:文本文件、二进制文件 2、C语言文件接口 # include <stdio.h> FILE * fopen ( const char * path , const char * mode ) ; int fclose ( FILE * stream ) ; //读二进制文件 size_t fread ( void * ptr , size_t size , size_t nmemb , FILE * stream ) ; //写二进制文件 size_t fwrite ( const void * ptr , size_t size , size_t nmemb , FILE * stream ) ; //读字符 int fgetc ( FILE * stream ) ; //写字符 int fputc ( int c , FILE * stream ) ; //读文本行 char * fgets ( char * s , int size , FILE * stream ) ; //写文本行 int fputs ( const char * s , FILE * stream ) ; r:只读 w:只写 a:追加 b:二进制文件操作 (*不独立出现,与前几个组合使用) +:读写 (*不独立出现,与前几个组合使用) (1

动态内存分配

こ雲淡風輕ζ 提交于 2020-01-10 15:25:06
动态内存分配的意义 C语言中的一切操作都是基于内存的 变量和数组都是内存的别名 内存分配由编译器在编译期间决定 定义数组的时候必须指定数组长度 数组长度是在编译期就必须确定的 需求:程序运行的过程中,可能需要使用一些额外的内存空间 malloc和free用于执行动态内存分配和释放 malloc所分配的是一块连续的内存 malloc以字节为单位,并且不带任何的类型信息 free用于将动态内存归还系统 1 void*malloc(size_t size); 2 void free(void*pointer); 注意: malloc和free是库函数 malloc实际分配的内存可能会比请求的多 不能依赖与不同平台的malloc行为 当请求的动态内存无法满足时,malloc返回NULL 当free的参数为NULL,函数直接返回 malloc的同胞兄弟 1 void*calloc(size_t num,size_t size); 2 void*realloc(void*pointer,size_t,nem_size); calloc的参数返回内存的类型信息,calloc会将返回的内存初始化为0 realloc用于修改一个原先已经分配的内存大小,当使用realloc之后应该使用其返回值,当pointer的第一个参数为NULL时,等价于malloc 来源: https://www.cnblogs

mimalloc源码笔记

雨燕双飞 提交于 2020-01-09 02:57:48
mimalloc是微软去年6月开源的(竟然拖了半年才开始写笔记)新的内存分配器, 其最早由Daan Leijen开发, 为Koka与Lean等语言的runtime system提供内存管理. 根据 官方文档 描述, mimalloc在各类benchmark上性能均优于其它主流allocator(分别超过tcmalloc与jemalloc 7%与14%)且消耗更少内存. mimalloc当前版本为1.2.2, 在 这里 可以获取源码与文档. 1. 编译与使用 mimalloc使用cmake作为构建工具, 执行以下命令即可编译. 成功编译后在构建目录下会生成所需(libmimalloc)的动态库/静态库以及测试工具. mkdir -p [dir to build] cd [dir to build] cmake [source path] make 可以通过在源文件中包含mimalloc.h并增加-lmimalloc选项来使用mimalloc. mimalloc可以与其它allocator共存, 对于cmake构建可以使用以下命令设置: target_link_libraries([program] PUBLIC mimalloc) 如果不希望重新编译也可以通过设置环境变量来替换: env LD_PRELOAD=[path/to/libmimalloc.so] [program]

健壮的I/O(RIO)

对着背影说爱祢 提交于 2019-12-30 13:35:00
在上篇 Unix系统级I/O 中,我们介绍了有关在Unix环境下读取和写入文件的函数 read 和 write ,也提到了标准I/O在进行网络I/O时的局限性。但是在某些地方,直接使用 read 和 write 往往会出现不足值,比如在复杂的网络环境中读取socket。如果想让我们的程序更加的可靠,就需要反复的调用 read 和 write 去处理,知道传送完所需要的字节。在csapp一书中,给我们提供了一个健壮可靠的I/O包来自动处理这种不足值的情况,称为RIO(Robust I/O)。本文主要整理RIO提供的函数备忘。 详细代码及用法示例可以在 这里 找到。 无缓冲区的rio rio_readn 、 rio_writen 和 read 、 write 用法基本一致,只是 rio_readn 会不断尝试读出,直到读取出n个字节或遇到EOF或出错; rio_writen 函数绝不会返回一个不足值,它会不断尝试写入直到写入全部字节或者出错。由于没有缓冲区的存在, rio_readn 和 rio_writen 可以任意交替使用。 #include "rio.h" ssize_t rio_readn(int fd, void *buf, size_t n); /* 返回:若成功则为传送的字节数,若为EOF则为0,若出错则为-1 */ ssize_t rio_writen(int fd,

将图片存储到GPU

瘦欲@ 提交于 2019-12-28 12:24:10
将图片存储到GPU分为两步:在GPU上分配内存,将图片从CPU复制到GPU。 在GPU上分配内存 cudaMallocPitch ( void * * devPtr,size_t * pitch,size_t widthInBytes,size_t height ) 示例代码: void CudaImage :: Allocate ( int w , int h , int p , bool host , float * devmem , float * hostmem ) { width = w ; height = h ; pitch = p ; d_data = devmem ; h_data = hostmem ; t_data = NULL ; if ( devmem == NULL ) { safeCall ( cudaMallocPitch ( ( void * * ) & d_data , ( size_t * ) & pitch , ( size_t ) ( sizeof ( float ) * width ) , ( size_t ) height ) ) ; pitch / = sizeof ( float ) ; if ( d_data == NULL ) printf ( "Failed to allocate device data\n" ) ; d