MAC下编译动态链接库函数的可见性

编译的时候加上 -fvisibility=hidden,可以隐藏一般函数的可见性,如果要使得函数可见,则要加上__attribute__((visibility(“default”)))

代码如下:

#include <stdio.h>
__attribute__ ((visibility ("default")))
void b() 
{
printf("Hello b\r\n");    
}

void a() 
{
printf("Hello\r\n");    
}

 

保存成a.c,然后用命令行编译:

gcc -shared -fPIC a.c -fvisibility=hidden

此时生成a.out,然后用nm查看,可以看到函数a前面是小t,说明是隐藏的,函数b前面是大T,说明是可见的

孕20周

关于无创DNA

这周终于收到了杭州市妇产科医院的无创DNA短信,宝宝没有异常,真是个好消息。
这个杭州市妇产科医院的无创DNA太慢了,要2周才出短信,加上过年放假,都3周了。建议取省妇保、邵逸夫医院做,大概3~5个工作日就出来了。
唐氏筛查杭州已经免掉了,查么就要贡献血。 高龄产妇还是直接无创DNA吧,唐氏筛查对高龄来说基本上就是不准,它本身只有60%~70%的准确率,再加上高龄,误报的可能性大大增加了,白白担心了好一阵子。羊水穿刺也是很准的,不好的是会有千分之一的流产概率,也是要命的,保守一点还是无创DNA了,21体的准确率99%,其他2个也有90%以上,比唐氏筛查好,就是要花一千多。

心理一块大石头落下了。接着就去预约四维彩超,就中档的吧。社区医院还有优惠券领,附近的几家医院都有券。

再就是看建大卡的攻略了。有的说20周以后就可以去建大卡,社区医生说是24周。先把攻略贴出来:

 

1)挂号:
糖耐:9点之前医生必须开单,也就是说9点之后是做不了的,所以挂号要挂9点之前的号子

2)晚上9点加餐、喝水,10:30后禁食
10:30–8:30 大概10小时空腹
准备好刻度杯、水杯

建卡材料:建卡当天需带上市民卡、医保证历本、围产期保健手册以及前期所有的检查报告。
建卡时候,爱美的孕妈们不要穿连体裤、长靴这类不方便穿脱的服装

3)社保卡里面存入1000元

4)带着《孕产妇保健手册》去找门口的护士,登记、测量身高和体重
=> 拿到:建卡通知单、入院须知、孕妇学校听课证
登记完后再到门口去等待叫号

5)医生会开检查单:糖耐、甲状腺和心电图、生化类检查、凝血功能四项、微量元素、贫血三项、血常规、尿常规。

6)老公去预约心电、准备好糖粉和杯子
如果糖耐没通过,可以挂一个下午的营养门诊号子,详细问下饮食

7)
8:30 做空腹抽血
尿检,医生不建议糖耐测试喝过糖水之后再留尿

自带有刻度的量水杯,75g葡萄糖粉+300ml温水,5分钟内喝完
2次抽血空隙可以去门诊六楼听孕妇课堂

9:40 葡萄糖后第1次抽血(不需要重新拿号子排队),时间差不多到了提前五分钟直接到一号窗口抽血就行了
10:40 葡萄糖后第2次抽血(不需要重新拿号子排队),时间差不多到了提前五分钟直接到一号窗口抽血就行了

8)吃饭

9)14:00出糖耐结果,给医生看

 

也有攻略说分2次的:
第一次大概22周去,挂产科初诊(建大卡)号子,不做糖耐,光准备钱、开单、预约到24周做糖耐、心电图。然后就可以回去了
第二次再按上面的流程走一遍,不过要注意挂下午产科复诊号子

 

 


小结

要带的东西:
小卡
NT超声单
三维/四维超声单
市民卡
病历本

手机(挂号、支付、看排队叫号都需要)
刻度杯
水杯
面包

 

数组读取性能比较

1~255的数组,如何组织起来,读取比较快?

1)用BYTE数组
2)用int数组(32位)
3)用long long数组(64位)

static BYTE a[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 0 };

static int b[] = { 
	1 << 24 | 2 << 16 | 3 << 8 | 4   ,
	5 << 24 | 6 << 16 | 7 << 8 | 8   ,
	9 << 24 | 10 << 16 | 11 << 8 | 12  ,
	13 << 24 | 14 << 16 | 15 << 8 | 16  ,
	17 << 24 | 18 << 16 | 19 << 8 | 20  ,
	21 << 24 | 22 << 16 | 23 << 8 | 24  ,
	25 << 24 | 26 << 16 | 27 << 8 | 28  ,
	29 << 24 | 30 << 16 | 31 << 8 | 32  ,
	33 << 24 | 34 << 16 | 35 << 8 | 36  ,
	37 << 24 | 38 << 16 | 39 << 8 | 40  ,
	41 << 24 | 42 << 16 | 43 << 8 | 44  ,
	45 << 24 | 46 << 16 | 47 << 8 | 48  ,
	49 << 24 | 50 << 16 | 51 << 8 | 52  ,
	53 << 24 | 54 << 16 | 55 << 8 | 56  ,
	57 << 24 | 58 << 16 | 59 << 8 | 60  ,
	61 << 24 | 62 << 16 | 63 << 8 | 64  ,
	65 << 24 | 66 << 16 | 67 << 8 | 68  ,
	69 << 24 | 70 << 16 | 71 << 8 | 72  ,
	73 << 24 | 74 << 16 | 75 << 8 | 76  ,
	77 << 24 | 78 << 16 | 79 << 8 | 80  ,
	81 << 24 | 82 << 16 | 83 << 8 | 84  ,
	85 << 24 | 86 << 16 | 87 << 8 | 88  ,
	89 << 24 | 90 << 16 | 91 << 8 | 92  ,
	93 << 24 | 94 << 16 | 95 << 8 | 96  ,
	97 << 24 | 98 << 16 | 99 << 8 | 100 ,
	101 << 24 | 102 << 16 | 103 << 8 | 104 ,
	105 << 24 | 106 << 16 | 107 << 8 | 108 ,
	109 << 24 | 110 << 16 | 111 << 8 | 112 ,
	113 << 24 | 114 << 16 | 115 << 8 | 116 ,
	117 << 24 | 118 << 16 | 119 << 8 | 120 ,
	121 << 24 | 122 << 16 | 123 << 8 | 124 ,
	125 << 24 | 126 << 16 | 127 << 8 | 128 ,
	129 << 24 | 130 << 16 | 131 << 8 | 132 ,
	133 << 24 | 134 << 16 | 135 << 8 | 136 ,
	137 << 24 | 138 << 16 | 139 << 8 | 140 ,
	141 << 24 | 142 << 16 | 143 << 8 | 144 ,
	145 << 24 | 146 << 16 | 147 << 8 | 148 ,
	149 << 24 | 150 << 16 | 151 << 8 | 152 ,
	153 << 24 | 154 << 16 | 155 << 8 | 156 ,
	157 << 24 | 158 << 16 | 159 << 8 | 160 ,
	161 << 24 | 162 << 16 | 163 << 8 | 164 ,
	165 << 24 | 166 << 16 | 167 << 8 | 168 ,
	169 << 24 | 170 << 16 | 171 << 8 | 172 ,
	173 << 24 | 174 << 16 | 175 << 8 | 176 ,
	177 << 24 | 178 << 16 | 179 << 8 | 180 ,
	181 << 24 | 182 << 16 | 183 << 8 | 184 ,
	185 << 24 | 186 << 16 | 187 << 8 | 188 ,
	189 << 24 | 190 << 16 | 191 << 8 | 192 ,
	193 << 24 | 194 << 16 | 195 << 8 | 196 ,
	197 << 24 | 198 << 16 | 199 << 8 | 200 ,
	201 << 24 | 202 << 16 | 203 << 8 | 204 ,
	205 << 24 | 206 << 16 | 207 << 8 | 208 ,
	209 << 24 | 210 << 16 | 211 << 8 | 212 ,
	213 << 24 | 214 << 16 | 215 << 8 | 216 ,
	217 << 24 | 218 << 16 | 219 << 8 | 220 ,
	221 << 24 | 222 << 16 | 223 << 8 | 224 ,
	225 << 24 | 226 << 16 | 227 << 8 | 228 ,
	229 << 24 | 230 << 16 | 231 << 8 | 232 ,
	233 << 24 | 234 << 16 | 235 << 8 | 236 ,
	237 << 24 | 238 << 16 | 239 << 8 | 240 ,
	241 << 24 | 242 << 16 | 243 << 8 | 244 ,
	245 << 24 | 246 << 16 | 247 << 8 | 248 ,
	249 << 24 | 250 << 16 | 251 << 8 | 252 ,
	253 << 24 | 254 << 16 | 255 << 8 | 0
};

static unsigned __int64 c[] = {
	(1ll << 24 | 2 << 16 | 3 << 8 | 4) << 32 | (5 << 24 | 6 << 16 | 7 << 8 | 8),
	(9ll << 24 | 10 << 16 | 11 << 8 | 12) << 32 | (13 << 24 | 14 << 16 | 15 << 8 | 16),
	(17ll << 24 | 18 << 16 | 19 << 8 | 20) << 32 | (21 << 24 | 22 << 16 | 23 << 8 | 24),
	(25ll << 24 | 26 << 16 | 27 << 8 | 28) << 32 | (29 << 24 | 30 << 16 | 31 << 8 | 32),
	(33ll << 24 | 34 << 16 | 35 << 8 | 36) << 32 | (37 << 24 | 38 << 16 | 39 << 8 | 40),
	(41ll << 24 | 42 << 16 | 43 << 8 | 44) << 32 | (45 << 24 | 46 << 16 | 47 << 8 | 48),
	(49ll << 24 | 50 << 16 | 51 << 8 | 52) << 32 | (53 << 24 | 54 << 16 | 55 << 8 | 56),
	(57ll << 24 | 58 << 16 | 59 << 8 | 60) << 32 | (61 << 24 | 62 << 16 | 63 << 8 | 64),
	(65ll << 24 | 66 << 16 | 67 << 8 | 68) << 32 | (69 << 24 | 70 << 16 | 71 << 8 | 72),
	(73ll << 24 | 74 << 16 | 75 << 8 | 76) << 32 | (77 << 24 | 78 << 16 | 79 << 8 | 80),
	(81ll << 24 | 82 << 16 | 83 << 8 | 84) << 32 | (85 << 24 | 86 << 16 | 87 << 8 | 88),
	(89ll << 24 | 90 << 16 | 91 << 8 | 92) << 32 | (93 << 24 | 94 << 16 | 95 << 8 | 96),
	(97ll << 24 | 98 << 16 | 99 << 8 | 100) << 32 | (101 << 24 | 102 << 16 | 103 << 8 | 104),
	(105ll << 24 | 106 << 16 | 107 << 8 | 108) << 32 | (109 << 24 | 110 << 16 | 111 << 8 | 112),
	(113ll << 24 | 114 << 16 | 115 << 8 | 116) << 32 | (117 << 24 | 118 << 16 | 119 << 8 | 120),
	(121ll << 24 | 122 << 16 | 123 << 8 | 124) << 32 | (125 << 24 | 126 << 16 | 127 << 8 | 128),
	(129ull << 56 | 130ull << 48 | 131ull << 40 | 132ull << 32) | (133ull << 24 | 134ull << 16 | 135ull << 8 | 136ull),
	(137ull << 56 | 138ull << 48 | 139ull << 40 | 140ull << 32) | (141ull << 24 | 142ull << 16 | 143ull << 8 | 144ull),
	(145ull << 56 | 146ull << 48 | 147ull << 40 | 148ull << 32) | (149ull << 24 | 150ull << 16 | 151ull << 8 | 152ull),
	(153ull << 56 | 154ull << 48 | 155ull << 40 | 156ull << 32) | (157ull << 24 | 158ull << 16 | 159ull << 8 | 160ull),
	(161ull << 56 | 162ull << 48 | 163ull << 40 | 164ull << 32) | (165ull << 24 | 166ull << 16 | 167ull << 8 | 168ull),
	(169ull << 56 | 170ull << 48 | 171ull << 40 | 172ull << 32) | (173ull << 24 | 174ull << 16 | 175ull << 8 | 176ull),
	(177ull << 56 | 178ull << 48 | 179ull << 40 | 180ull << 32) | (181ull << 24 | 182ull << 16 | 183ull << 8 | 184ull),
	(185ull << 56 | 186ull << 48 | 187ull << 40 | 188ull << 32) | (189ull << 24 | 190ull << 16 | 191ull << 8 | 192ull),
	(193ull << 56 | 194ull << 48 | 195ull << 40 | 196ull << 32) | (197ull << 24 | 198ull << 16 | 199ull << 8 | 200ull),
	(201ull << 56 | 202ull << 48 | 203ull << 40 | 204ull << 32) | (205ull << 24 | 206ull << 16 | 207ull << 8 | 208ull),
	(209ull << 56 | 210ull << 48 | 211ull << 40 | 212ull << 32) | (213ull << 24 | 214ull << 16 | 215ull << 8 | 216ull),
	(217ull << 56 | 218ull << 48 | 219ull << 40 | 220ull << 32) | (221ull << 24 | 222ull << 16 | 223ull << 8 | 224ull),
	(225ull << 56 | 226ull << 48 | 227ull << 40 | 228ull << 32) | (229ull << 24 | 230ull << 16 | 231ull << 8 | 232ull),
	(233ull << 56 | 234ull << 48 | 235ull << 40 | 236ull << 32) | (237ull << 24 | 238ull << 16 | 239ull << 8 | 240ull),
	(241ull << 56 | 242ull << 48 | 243ull << 40 | 244ull << 32) | (245ull << 24 | 246ull << 16 | 247ull << 8 | 248ull),
	(249ull << 56 | 250ull << 48 | 251ull << 40 | 252ull << 32) | (253ull << 24 | 254ull << 16 | 255ull << 8 | 0ull)
};

 

 

		BYTE * pU8Line = a;
		for (int i = 0; i < 256; i++)
		{
			tmp = pU8Line[0];
			pU8Line++;
		}


		int * pLine = b;
		for (int i = 0; i < 64; i++)
		{
			BYTE* pData = (BYTE*) pLine;
			tmp = pData[3];
			tmp = pData[2];
			tmp = pData[1];
			tmp = pData[0];

			pLine++;
		}


		unsigned __int64 * pLine = c;
		for (int i = 0; i < 32; i++)
		{
			BYTE* pData = (BYTE*)pLine;
			tmp = pData[7];
			tmp = pData[6];
			tmp = pData[5];
			tmp = pData[4];

			tmp = pData[3];
			tmp = pData[2];
			tmp = pData[1];
			tmp = pData[0];

			pLine++;
		}

 

结论:64位的最快,但比32位只快了一点点,比BYTE数组快很多(一倍以上)