概述

要想高速利用内存就必须高效利用cpu cache,关于cpu cache这里就不多加讨论了,自己感兴趣可以google

而cpu访问内存的单位是cache line,因此高效利用cache line是写c程序的必要条件

__attribute__ 作用于结构体内部变量

   struct foo{
int a; char b;// __attribute__((aligned(64))); // char c;
};//__attribute__((aligned(64)));
int main()
{
struct foo foo;
printf("%d\n",(sizeof(struct foo)));
return ;
}

输出为8,因为编译器会默认对结构体中的每个元素做对齐,而对其单位为结构体中占字节最多的变量

   struct foo{
int a; char b __attribute__((aligned())); // char c;
};//__attribute__((aligned(64)));
int main()
{
struct foo foo;
printf("%d\n",(sizeof(struct foo)));
return ;
}

输出为128,因为__attribute__作用于结构体内部变量时会把该变量与结构体首地址的偏移设置为64的倍数,

即b-a的地址偏移为64,而编译器会默认对结构体中的每个元素做对齐,而本例中在编译器看来

变量a占的内存空间为64字节,因此输出为128

   struct foo{
int a; char b __attribute__((aligned())); char c;
};//__attribute__((aligned(64)));
int main()
{
struct foo foo;
printf("%d\n",(sizeof(struct foo)));
return ;
}

输出仍为128,因为b只占用了1个字节,而结构体是按64字节对齐的,因此c-b地址偏移为1

__attribute__ 作用于结构体

   struct foo{
int a; char b ;//__attribute__((aligned(64))); char c;
}__attribute__((aligned()));
int main()
{
struct foo foo;
printf("%d\n",(sizeof(struct foo)));
printf("%p\n",(&foo));
return ;
}

输出

64
0x7fffd34de600

当__attribute__作用于结构体时有两个作用,一个是让结构体的大小是64的倍数,另外一个作用

是当在栈上分配结构时,结构体的首地址是64的倍数;如果在堆上分配结构体的话,则结构体的

首地址不一定是64的倍数。

Linux c 内存高速访问的更多相关文章

  1. 关于linux下内存使用的一些疑惑[转载]

    Linux内存机制-Cache与Buffer 在linux中经常发现空闲内存很少,似乎所有的内存都被系统占用了,表面感觉内存不够用了,其实不然.这是Linux内存管理的一个优秀特性,在这方面,区别于w ...

  2. Linux ------清除内存中的cache

    首先以Centos6.4的来说,Centos7有些区别 一.buffer/cache/swap的介绍 #cat /etc/redhat-release  #查看系统版本 CentOS release ...

  3. Linux堆内存管理深入分析(上)

    Linux堆内存管理深入分析(上半部) 作者:走位@阿里聚安全   0 前言 近年来,漏洞挖掘越来越火,各种漏洞挖掘.利用的分析文章层出不穷.从大方向来看,主要有基于栈溢出的漏洞利用和基于堆溢出的漏洞 ...

  4. Linux系统内存占用90%以上 ?

    问题: [root@dbserver01 zx_epp_db]# free -m total used free shared buffers cached Mem: 15953 14706 1246 ...

  5. 深入理解Linux中内存管理

    前一段时间看了<深入理解Linux内核>对其中的内存管理部分花了不少时间,但是还是有很多问题不是很清楚,最近又花了一些时间复习了一下,在这里记录下自己的理解和对Linux中内存管理的一些看 ...

  6. Linux就这个范儿 第18章 这里也是鼓乐笙箫 Linux读写内存数据的三种方式

    Linux就这个范儿 第18章  这里也是鼓乐笙箫  Linux读写内存数据的三种方式 P703 Linux读写内存数据的三种方式 1.read  ,write方式会在用户空间和内核空间不断拷贝数据, ...

  7. Linux就这个范儿 第15章 七种武器 linux 同步IO: sync、fsync与fdatasync Linux中的内存大页面huge page/large page David Cutler Linux读写内存数据的三种方式

    Linux就这个范儿 第15章 七种武器  linux 同步IO: sync.fsync与fdatasync   Linux中的内存大页面huge page/large page  David Cut ...

  8. Linux共享内存

    1.什么是共享内存在前面讲虚拟内存机制时,有讲到Linux的内存映射机制:初始化虚拟内存区域时,会把虚拟内存和磁盘文件对象对应起来.由于内存映射机制,一个磁盘文件对象可被多个进程共享访问,也可被多个进 ...

  9. Linux的内存回收和交换

    Linux的内存回收和交换 版权声明: 本文章内容在非商业使用前提下可无需授权任意转载.发布. 转载.发布请务必注明作者和其微博.微信公众号地址,以便读者询问问题和甄误反馈,共同进步. 微博ID:or ...

随机推荐

  1. Fast Token Replacement in C#

    http://www.codeproject.com/Articles/298519/Fast-Token-Replacement-in-Csharp Fast Token Replacement i ...

  2. Android分渠道打包(Python 3.4 实现)

    Android批量打包实现有很多方式你可以用Ant,Maven或者Gradle.在处理多个Library和NDK编译的时候配置有些麻烦,且每个渠道都编译一次效率较低.如果没有复杂的分渠道编译需求,我们 ...

  3. EM算法详解

    EM算法详解 1 极大似然估计 假设有如图1的X所示的抽取的n个学生某门课程的成绩,又知学生的成绩符合高斯分布f(x|μ,σ2),求学生的成绩最符合哪种高斯分布,即μ和σ2最优值是什么? 图1 学生成 ...

  4. Use weechat (IRC client) on OS X. MacBook Pro

    Weechat is a console IRC client. It is opensource and very easy to use. I use weechat in my Linux PC ...

  5. Hackers’ Crackdown-----UVA11825-----DP+状态压缩

    题目地址:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...

  6. 使用ThreadGroup模拟线程池

    参考文章: [1]创建线程池 http://sunnylocus.iteye.com/blog/223327?page=2#comments [2]线程组ThreadGroup  http://hub ...

  7. Oracle基础学习(一)常用函数

    1.绝对值:abs() select abs(-2) value from dual; 2.取整函数(大):ceil() select ceil(-2.001) value from dual;(-2 ...

  8. RocketMQ源码 — 一、 quikstart

    RocketMQ quikstart 获取源码 git clone https://github.com/alibaba/RocketMQ.git 编译打包 cd RocketMQ bash inst ...

  9. H5与CS3权威下.18 and 19 选择器(1)

    18章.CSS3概述 1.从前端技术的角度把互联网的发展分为三个阶段: (1)web1.0:HTML和CSS. (2)web2.0:Ajax,Javascript/DOM/异步数据请求. (3)web ...

  10. windows系统下快捷命令

    mstsc 远程计算机 regedit 注册表