概述

要想高速利用内存就必须高效利用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. Dispose模式

    Dispose模式 Dispose模式是.NET中很基础也很重要的一个模式,今天重新复习一下相关的东西并记录下来. 什么是Dispose模式? 什么时候我们该为一个类型实现Dispose模式 使用Di ...

  2. 安装centos6总结

    安装centos6总结 界面说明: Install or upgrade an existing system 安装或升级现有的系统 install system with basic video d ...

  3. Big Data Ingestion and streaming product introduction

    Flume Flume isdistributed system for collecting log data from many sources, aggregating it,and writi ...

  4. setprecision、fixed、showpoint的用法总结(经典!!超经典!!)

    首先要加头文件:iomanip 一:setprecision 作用:控制输出流显示浮点数的数字个数,setprecision(n)就是输出的n个数,会有四舍五入. 比如:double s=20.784 ...

  5. Windows Azure功能更新:弹性伸缩(autoscale)、监控报警、移动服务及网站服务商用、新的虚拟机镜像

    Windows Azure功能又更新了.此次更新包括1项重要更新和两个功能更新: 重要更新:云服务.网站支持按策略进行弹性伸缩 功能更新:两个预览版的服务(网站和移动)进入商用,虚拟机服务支持SQL ...

  6. android fragment addToBackStack bug

    In FragmentActivity.First, I add two fragment by FragmentTransaction. See the flowing code : /****** ...

  7. .Net程序员学用Oracle系列(4):四个基本概念

    <.Net程序员学用Oracle系列:导航目录> 本文大纲 1.概念说明 1.1.表空间 1.2.SCHEMA 1.3.用户 1.4.权限 2.表空间管理 2.1.创建表空间 2.2.监控 ...

  8. php之简单的文件管理(基本功能)

    (1)先要想好要操作哪个文件? (2)确定文件的路径? (3)要有什么文件管理功能? 一.先做一下简单的查看文件功能,文件中的文件和文件夹都显示,但是双击文件夹可以显示下一级子目录,双击"返 ...

  9. vim 模式基础操作

    作者:枫雪庭 出处:http://www.cnblogs.com/FengXueTing-px/ 欢迎转载 前言 虽然Emacs已经可以完成大部分的编辑操作,但有时候为了方便也会用到vim.所以记录了 ...

  10. hdu1046

    #include<iostream> #include<cmath> using namespace std; int main() { int T,t=0,m,n; cin& ...