sizeof

多线程cpu affinity问题

杀马特。学长 韩版系。学妹 提交于 2020-02-16 03:20:11
为了提高多线程程序的性能,有时候需要将线程绑定到固定的cpu core上。 在这个过程中一不小心就会产生编译的问题,但是明明头文件都定义了,却依然编译通不过。 不巧我就遇到了,google也基本搜不到这个问题的解决方案,没办法,只能自己解决了。 下面这个程序就会出现这种问题: [cpp] view plaincopy #include <stdio.h> #include <pthread.h> #define __USE_GNU #include <sched.h> void mybind_cpu( int cpu_id) { cpu_set_t mask; //! sched_setaffinity CPU_ZERO(&mask); CPU_SET(cpu_id, &mask); if (sched_setaffinity(0, sizeof (cpu_set_t), &mask) < 0) { printf( "Error: cpu id %d sched_setaffinity\n" , cpu_id); printf( "Warning: performance may be impacted \n" ); } return ; } void test_thread( void *cpu_id) { int cpuid = ( int )( long )cpu_id;

2017百度之星 资格赛

一曲冷凌霜 提交于 2020-02-15 15:02:34
1001 度度熊保护村庄 Accepts: 26 Submissions: 703 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Problem Description 哗啦啦村袭击了喵哈哈村! 度度熊为了拯救喵哈哈村,带着自己的伙伴去救援喵哈哈村去了!度度熊与伙伴们很快的就过来占据了喵哈哈村的各个军事要地,牢牢的守住了喵哈哈村。 但是度度熊发现,这是一场旷日持久的战斗,所以度度熊决定要以逸待劳,保存尽量多的体力,去迎战哗啦啦村的战士。 于是度度熊决定派尽量多的人去休息,但是同时也不能松懈对喵哈哈村的保护。 换句话而言,度度熊希望尽量多的人休息,而且存在一个包围圈由剩下的人组成,且能够恰好的包围住喵哈哈村的所有住房(包括边界)。 请问最多能让多少个人休息呢? Input 本题包含若干组测试数据。 第一行一个整数n,表示喵哈哈村的住房数量。 接下来n行,每行两个整数(x1[i],y1[i]),表示喵哈哈村的住房坐标。 第n+1行一个整数m,表示度度熊的士兵数量。 接下来m行,每行两个整数(x2[i],y2[i]),表示度度熊伙伴的坐标。 满足: 1<=n,m<=500 -10000<=x1[i],x2[i],y1[i],y2[i]<=10000 Output

C++primer学习笔记(三)

谁都会走 提交于 2020-02-15 12:39:17
sizeof 注意事项:sizeof是一个运算符,而不是函数,虽然用起来非常像函数。 作用:返回一个类型或变量的字节长度。 用法: 当对类型名使用时,需要加括号,例如: sizeof(int) 当对变量名使用时,括号时可选的,例如: int a; sizeof(a);//合法 sizeof a; //同样合法 初始化 常规初始化方式,例如: int a = 8; c++形式的初始化, 例如: int a(8); c++11初始化方式, 如下: 可使用等号: int a = { 8 }; 也可不使用等号: int a{8}; 大括号内也可不包括任何东西,则默认初始化为0。 整型数据长度标准 short 至少16位 int 至少与 short 一样长 long 至少32位,且至少与 int 一样长 long long 至少64位,且至少与 long 一样长 头文件climits climits 是c++的头文件,如果是c语言,则使用limits.h这个头文件 此头文件中包含了一些预设的常量,摘取常用的如下: 名称 含义 INT_MAX int类型中的最大值 INT_MIN int类型中的最小值 更改cout输出数据默认的进制 位于std命名空间内有控制符 dec、oct 和 hex,用于更改cout输出数时的默认进制,默认为十进制。使用方法如下: //其他相关代码省略 using

机房测试8.23

[亡魂溺海] 提交于 2020-02-15 06:09:12
题解之前 咕咕咕 因为教练不在,玩去了,好几天没有更新。%%% @wans 鸽掉的几天这里有 (妹子) 。 前几天 谜题实验室 推出了,每天晚上就和几个同学一起准备AC这上面的题,结果奴隶战OTK就花了好久才A。 (祭奠天国的战歌) %%% 辣个男人 idy002 又来了。 prob 确实被我一眼秒杀的题,我却被我的傻逼做法秒杀了。 满足条件的一定只需要2道题。(n<=5时) 本来01状态压缩一下不就完事了,但是我脑子一抽,写了如下程序: #include<cstdio> #include<cctype> #include<cstring> #define FN "prob" const int maxn=1e5+5; int a[maxn],d[maxn]; int b[maxn],c[maxn]; namespace Baoli { void one(int num) { memset(b,0,sizeof(b)); bool fl=false; for(int i=1;i<=num;i++) { char ch;while(!isdigit(ch=getchar())); b[i]=ch-'0'; if(!b[i]) fl=true; } if(fl) printf("YES\n"); else printf("NO\n"); return ; } void two(int

C@指针&数组

拟墨画扇 提交于 2020-02-15 00:54:03
一、指针数组和数组指针 1、字面意思理解指针数组和数组指针 指针数组的实质就是一个数组,这个数组中存储的内容全部是指针变量 数组指针的实质是一个指针,这个指针指向的是一个数组。 2、分析指针数组和数组指针的表达式 (1)int*p[5]; int(*p)[5]; int *(p[5]); (2)一般规律 :int *p;(p是一个指针) int p[5] ;(p是一个数组) 总结:我们定义一个符号时,关键在于首先找到定义的符号是谁(第一步找核心) 其次再来看谁跟核心最近,谁跟核心结合(第二部:找结合) 以后继续向外扩展(第三步:继续向外结合直到符号完) (3)核心结合 - 如何核心和 “ * ”结合,表示核心是指针, - 如果核心和“[ ]”结合表示核心是数组, - 如果核心和小括号“()”结合,表示核心是函数 (4)一般规律来分析3个符号 例子1: int *p[5]; (“[ ]”的优先级比“ * ”优先级高) p是一个数组,数组有5个元素,数组中的元素都是指针,指针指向的元素类型是int类型,整个符号是一个指针数组。 例子2: int (*p)[5]; 核心是p,p是一个指针,因为p被用括号和星好强制结合起来了。指针指向一个数组,数组有5个元素,数组中存在的元素是int类型; 例子3: int *(p[5]); 这里 加小括号没有意义,没起到左右,没有小括号,也是p与[

sizeof与strlen的区别

怎甘沉沦 提交于 2020-02-14 00:05:38
sizeof是一个单目运算符;而strlen是一个函数; 从字面意义来理解: sizeof的“size”是大小的意思,是用来计算某种数据类型的大小,即所占的字节数; strlen的“len”是长度的意思,是用来计算字符串的长度; 例:char str[7] = “Hello!”, int arr[3] = {1, 2, 3}; sizeof(str) = 7 * sizeof(char) = 7 * 1 = 7 字节 (包含‘\0’) strlen(str) = 6 (到‘\0’停止计算) sizeof(arr) = 3 * sizeof(int) = 3 *4 = 12 字节 (说明:1)sizeof(int)的结果在不同的计算机上会有所差异;2)整型数组的 结尾不包含’\0’,只有字符串/数组的结尾才包含‘\0’) 来源: CSDN 作者: qq_25621685 链接: https://blog.csdn.net/qq_25621685/article/details/104301184

7. 计算数组元素个数函数

早过忘川 提交于 2020-02-13 13:43:12
题目: 编写一个模板函数 count,返回值是数组 a[0: n - 1]的数值个数。测试你的代码。 思路: 首先,函数计算数组个数,返回值应该是 size_t 类型,为了简单起见,将其设为 int 类型。 下面考虑函数参数。一般来说,涉及数组的问题,需要传入数组名和数组元素个数。这里需要详细说明一下关于数组的知识。 数组是一系列相同元素的集合,访问数组元素,可以通过数组下标来实现。现在假设有一个数组,名字叫 array ,它包含 5 个元素。array[0] , array[1],分别代表数组的第一,第二个元素。 数组名实际上是一个指针,并且是一个常量指针(它以后不能指向另外一个数组),它指向数组第一个元素的首地址。也就是说,数组名实际包含的是一个地址,并没有其余信息。在传递参数时,知道了数组类型,就可以计算出每个元素的大小;知道数组名,就知道了起始地址;除此之外,还需要传入一个元素个数,这样就获得了所需的全部信息。函数便能够处理数组。 但是本题并没有数组元素个数,如何获得?数组元素的个数可以计算:通过 sizeof(数组名),可以获得数组的大小;通过 sizeof(数组类型),可以获得每个元素的大小,于是 sizeof(数组名)/ sizeof(数组类型),就获得了数组元素的个数。这种方法在函数外行的通,但是当数组作为参数传入函数时,数组名仅仅是一个指针,此时 sizeof

网络嗅探

只愿长相守 提交于 2020-02-12 11:50:58
windows下不能获取数据链路层的数据 所以拿不到mac地址,RawSocket 编程 要用管理员权限打开 看到这张图,我又想起了期末考试的时候,考了tcp源地址和目的地址,记反了,丢了四分,我现在还记忆深刻。唉~ 1 #include <winsock2.h> 2 #include <ws2tcpip.h> 3 #include <stdio.h> 4 #include <stdlib.h> 5 #define MAX_HOSTNAME_LAN 255 6 #define SIO_RCVALL _WSAIOW(IOC_VENDOR,1) 7 #define MAX_ADDR_LEN 16 8 9 struct ipheader{ 10 unsigned char ip_h1:4; //先存低位,再存高位。这样两个的顺序就反了 11 unsigned char ip_v:4; 12 unsigned char ip_tos; //服务类型 8位 13 unsigned short int ip_len; //ip数据包总长度 14 unsigned short int ip_id; //16位标识 15 unsigned short int ip_off; //标志加偏移量(16)位 16 unsigned char ip_ttl; //8位 生成时间 17 unsigned

指针求两个有序数组的第一个相同元素

此生再无相见时 提交于 2020-02-12 00:20:36
first common element // 给定两个递增有序表,输出两表第一个相同的元素 # include <stdio.h> # include <string.h> int * fst_common_val ( int * a , int an , int * b , int bn ) { int * ptra , * ptrb ; ptra = a ; ptrb = b ; while ( ptra < a + an && ptrb < b + bn ) { if ( * ptra < * ptrb ) ptra ++ ; else if ( * ptra > * ptrb ) ptrb ++ ; else return ptra ; } return ptra ; } int main ( ) { int * a [ ] = { 1 , 3 , 5 , 7 , 9 , 11 , 13 , 17 , 19 } ; int * b [ ] = { 2 , 4 , 6 , 8 , 11 , 56 , } ; int * value ; int ( * func ) ( ) ; func = fst_common_val ; printf ( "the elements of a are: \n" ) ; for ( int i = 0 ; i < sizeof ( a )

ios学习之旅---指针也不难

我们两清 提交于 2020-02-11 12:51:08
1、认识指针 #include <stdio.h> //基本数据类型作为函数參数传递是值传递 //void moveFront(int x ,int y) //{ // x = x + 2; //} void test() { // 确定当前坐标 int x = 20; int y = 150; printf("%p\n",&x); printf("%lu\n",&x); *((int *)(0x7fff5fbff76c)) = 22; printf("(%d,%d)\n",x,y); // moveFront(x, y); // printf("(%d,%d)\n",x,y); } //假设你想訪问指针所指向存储空间,就必须使用訪问指针所指向的存储空间的操作符 void moveFront(int *x ,int *y) { // x = x + 2;//此时是改变指针的指向,而不是訪问指针所指向的存储空间 *x = *x + 2; } int main(int argc, const char * argv[]) { // 确定当前坐标 int x = 20; int y = 150; printf("(%d,%d)\n",x,y); moveFront(&x, &y); printf("(%d,%d)\n",x,y); return 0; } 2、指针的定义与初始化(重点掌握