sizeof

sizeof 和strlen的区别

只愿长相守 提交于 2019-12-24 06:24:09
一、sizeof sizeof(...) 是运算符,在头文件中typedef 为unsigned int ,其值在编译时即计算好了,参数可以是数组、指针、类型、对象、函数等。 它的功能是:获得保证能容纳实现所建立的最大对象的字节大小。 由于在编译时计算,因此sizeof 不能用来返回动态分配的内存空间的大小。实际上,用sizeof 来返回类型以及静态分配的对象、结构或数组所占的空间,返回值跟对象、结构、数组所存储的内容没有关系。 具体而言,当参数分别如下时,sizeof 返回的值表示的含义如下: 数组—— 编译时分配的数组空间大小; 指针—— 存储该指针所用的空间大小(存储该指针的地址的长度,是长整型,应该为4 ); 类型—— 该类型所占的空间大小; 对象—— 对象的实际占用空间大小; 函数—— 函数的返回类型所占的空间大小。函数的返回类型不能是void 。 二、strlen strlen(...) 是函数,要在运行时才能计算。参数必须是字符型指针(char* )。当数组名作为参数传入时,实际上数组就退化成指针了。 它的功能是:返回字符串的长度。该字符串可能是自己定义的,也可能是内存中随机的,该函数实际完成的功能是从代表该字符串的第一个地址开始遍历,直到遇到结束符NULL 。返回的长度大小不包括NULL 。 来源: https://www.cnblogs.com/marvin

二分图最大匹配

a 夏天 提交于 2019-12-24 01:13:51
HDU 1150: http://acm.hdu.edu.cn/showproblem.php?pid=1150   最小覆盖点 == 最大匹配数( 选取最少的点数,使这些点和所有的边都有关联——把所有的边的覆盖 ) 两台机器,有n和m个工作模式,起始工作模式都为0,现在有k件工作,第i件工作可分别在两个机器上用各自的模式工作,但换模式要重启,问重启的最小次数。 写的时候因为是找二分最大匹配的题目时找到写的,想到了二分上去,也知道是求最小覆盖点 == 最大匹配数,但不是很能理解,先把代码写了再说。 写的时候注意起始模式是0,所以换模式时把0的排除再外。(因为这个原因错了很多次) 一:邻接阵做法 代码 #include<iostream>using namespace std;int n,m,k;int map[105][105]; //记录X,Y对应点可否连接int vis[105]; //每次找增广路时对Y中点是否访问int dir[105]; //Y中点匹配的X中点的位置int find(int a){ int i; for(i=0;i<m;i++) { if(map[a][i]==1 && vis[i] == 0) { vis[i] = 1; if(dir[i] == -1 || find(dir[i])) { dir[i] = a; return 1; } } }

Unix domain socket

青春壹個敷衍的年華 提交于 2019-12-24 00:11:22
转载:http://www.cnblogs.com/chekliang/p/3222950.html socket API原本是为网络通讯设计的,但后来在socket的框架上发展出一种IPC机制,就是UNIX Domain Socket。 虽然网络socket也可用于同一台主机的进程间通讯(通过loopback地址127.0.0.1),但是UNIX Domain Socket用于IPC更有效率:不需要经过网络协议栈,不需要打包拆包、计算校验和、维护序号和应答等,只是将应用层数据从一个进程拷贝到另一个进程。 这是因为,IPC机制本质上是可靠的通讯,而网络协议是为不可靠的通讯设计的。UNIX Domain Socket也提供面向流和面向数据包两种API接口,类似于TCP和UDP,但是面向消息的UNIX Domain Socket也是可靠的,消息既不会丢失也不会顺序错乱。   UNIX Domain Socket是全双工的,API接口语义丰富,相比其它IPC机制有明显的优越性,目前已成为使用最广泛的IPC机制,比如X Window服务器和GUI程序之间就是通过UNIX Domain Socket通讯的。   使用UNIX Domain Socket的过程和网络socket十分相似,也要先调用socket()创建一个socket文件描述符,address family指定为AF_UNIX

在Android手机上学习socket程序

老子叫甜甜 提交于 2019-12-23 22:10:24
我们都知道Android手机是基于Linux系统的,在没有Linux环境,但是想学习socket编程的同学可以在Android手机中试试,利用ndk编译可执行文件在Android手机中运行。不同于动态链接库so,本文首先使用的是可直接运行的bin程序,类似windows的exe文件。 好了,开始编写手机中的客户端服务器程序了! 首先看服务器: 我们新建一个c文件叫serv.c [html] view plain copy #include < sys/socket.h > #include < sys/types.h > #include < stdio.h > #include < stdlib.h > #include < string.h > #include < sys/errno.h > #include < netinet/in.h > #include < unistd.h > #include < arpa/inet.h > #define ERR_EXIT(m) \ do{ \ perror(m); \ exit(EXIT_FAILURE); \ }while(0) int main(void) { int listenfd; struct sockaddr_in servaddr; memset(&servaddr, 0, sizeof(servaddr));

boost::multiprecision::uint128_t sizeof is 24

僤鯓⒐⒋嵵緔 提交于 2019-12-23 16:13:18
问题 Basic math (128 / 8 = 16) speaks differently. I'm kinda disappointed and want some answers - since from what I've been used to, that notation(type_num_of_bytes_t) describes not just the amount of data you can put into the variable , but also cross-platform fixed variable size , and the latter is IMHO even more important. What am I doing wrong? #include "boost/multiprecision/cpp_int.hpp" using boost::multiprecision::uint128_t; ... qDebug() << sizeof(uint128_t); Output: 24. I'm using standard

关于内存对齐的面试题

戏子无情 提交于 2019-12-23 15:51:01
郑重声明:本文是笔者根据个人理解所写,错误难免,欢迎拍砖!      可以任意转载、修改,转载时是否标明出处,随君而定! 请说出如下2种方式,哪种更好,为什么? 方式一: void foo(int a, float b, char* ch, double d, float f); 方式二: struct A { int a; float b; char ch[5]; double d; float f; }; void foo(A* pa); 咋一看,不知道这题想要考什么,无从下手。其实该题是检查考生对于内存对齐的理解。下面我们先看看关于内存的一些知识。 什么是字节对齐 , 为什么要对齐 ?   现代计算机中内存空间都是按照byte划分的,从理论上讲似乎对任何类型的变量的访问可以从任何地址开始,但实际情况是在访问特定类型变量的时候经常在特定的内存地址访问,这就需要各种类型数据按照一定的规则在空间上排列,而不是顺序的一个接一个的排放,这就是对齐。   对齐的作用和原因:各个硬件平台对存储空间的处理上有很大的不同。一些平台对某些特定类型的数据只能从某些特定地址开始存取。比如有些架构的CPU在访问一个没有进行对齐的变量的时候会发生错误,那么在这种架构下编程必须保证字节对齐.其他平台可能没有这种情况,但是最常见的是如果不按照适合其平台要求对数据存放进行对齐,会在存取效率上带来损失

How to get the size of a user defined struct? (sizeof)

我与影子孤独终老i 提交于 2019-12-23 14:24:06
问题 I've got a structure with C representation: struct Scard_IO_Request { proto: u32, pciLength: u32 } when I want to ask the sizeof (like in C sizeof() ) using: mem::sizeof<Scard_IO_Request>(); I get compilation error: "error: `sizeof` is a reserved keyword" Why can't I use this sizeof function like in C? Is there an alternative? 回答1: For two reasons: There is no such function as " sizeof ", so the compiler is going to have a rather difficult time calling it. That's not how you invoke generic

Educational Codeforces Round 44 (Rated for Div. 2)

*爱你&永不变心* 提交于 2019-12-23 13:36:25
题目链接: https://codeforces.com/contest/985 ’A. Chess Placing 题意 :给了一维的一个棋盘,共有n(n必为偶数)个格子。棋盘上是黑白相间的。现在棋盘上有n/2个棋子,让你全部移动到黑色格子或者白色格子,要求步数最少,并输出步数。 题解:由于黑色或者白色都是固定位置,我们对棋子位置排个序,然后全部移动到任意一个颜色,取两个最小步数的最小值就好了。 1 #include<bits/stdc++.h> 2 #define clr(x) memset(x,0,sizeof(x)) 3 #define clr_1(x) memset(x,-1,sizeof(x)) 4 #define mod 1000000007 5 #define INF 0x3f3f3f3f 6 #define LL long long 7 #define pb push_back 8 #define pbk pop_back 9 #define ls(i) (i<<1) 10 #define rs(i) (i<<1|1) 11 #define mp make_pair 12 using namespace std; 13 const int N=1e5+10; 14 int a[N],p[N]; 15 int n,d,ans1,ans2; 16 int main()

sizeof operator gives extra size of a struct in C# [duplicate]

三世轮回 提交于 2019-12-23 10:43:11
问题 This question already has answers here : Structure padding and packing (8 answers) Closed 3 years ago . I am trying to check size of all of my variables (value types) using sizeof operator. I gone through one of the msdn article where it is written that For all other types, including structs, the sizeof operator can be used only in unsafe code blocks and also structs should not contain any fields or properties that are reference types For this, I enabled unsafe compilation in my project

C++ new/delete、malloc/free

会有一股神秘感。 提交于 2019-12-23 10:00:35
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> http://www.cnblogs.com/growup/archive/2011/06/27/2091101.html http://blog.csdn.net/passion_wu128/article/details/38966581 new和delete最终调用malloc和free 。 1.malloc与free是C++/C语言的 标准库函数 ,new/delete是C++的 运算符 。它们都可用于申请动态内存和释放内存 2.对于非内部数据类型的对象而言,光用maloc/free无法满足动态对象的要求。对象在创建的同时要自动执行构造函数,对象在消亡之前要自动执行析构函数。由malloc/free是库函数而不是运算符,不在编译器控制权限之内,不能够把执行构造函数和析构函数的任务强加于malloc/free。 3.因此C++语言需要一个能完成动态内存分配和初始化工作的运算符new,以一个能完成清理与释放内存工作的运算符delete。注意new/delete不是库函数。 4.C++程序经常要调用C函数,而C程序只能用malloc/free管理动态内存。 5.new可以认为是malloc加构造函数的执行。new出来的指针是直接带类型信息的。而malloc返回的都是void*指针。 new