gcc优化引起get_free_page比__get_free_page返回值多4096
2017-12-12 18:53:04
gcc优化引起get_free_page比__get_free_page返回值多4096
内核版本:1.3.100
extern inline unsigned long get_free_page(int priority)
{
unsigned long page;
page = __get_free_page(priority);
DDBUG("1.page=%p, nr=%d", page, page>>PAGE_SHIFT);
if (page){
memset((void *) page, 0, PAGE_SIZE);
}
DDBUG("2.page=%p, nr=%d", page, page>>PAGE_SHIFT);
return page;
}
page_alloc.c(245):__get_free_pages : 2.map_nr=431, ADDRESS(431)=001af000
/root/oldlinux/src/linux/include/linux/mm.h(242):get_free_page : 1.page=001af000, nr=431
/root/oldlinux/src/linux/include/linux/mm.h(246):get_free_page : 2.page=001b0000, nr=431
应该返回0x001af000结果错给了0x001b0000
修订:page使用volatile属性,告诉gcc,这个变量使用内存,使用前从内核中取
static inline unsigned long get_free_page(int priority)
{
volatile unsigned long page;
page = __get_free_page(priority);
DDBUG("1.page=%p, nr=%d", page, page>>PAGE_SHIFT);
if (page){
memset(page, 0, PAGE_SIZE);
}
DDBUG("2.page=%p, nr=%d", page, page>>PAGE_SHIFT);
return page;
}
page_alloc.c(245):__get_free_pages : 2.map_nr=431, ADDRESS(431)=001af000
/root/oldlinux/src/linux/include/linux/mm.h(241):get_free_page : 1.page=001af000, nr=431
/root/oldlinux/src/linux/include/linux/mm.h(245):get_free_page : 2.page=001af000, nr=431
gcc优化引起get_free_page比__get_free_page返回值多4096的更多相关文章
- [转] C++中临时对象及返回值优化
http://www.cnblogs.com/xkfz007/articles/2506022.html 什么是临时对象? C++真正的临时对象是不可见的匿名对象,不会出现在你的源码中,但是程序在运行 ...
- 转:C++中临时对象及返回值优化
http://www.cnblogs.com/xkfz007/articles/2506022.html 什么是临时对象? C++真正的临时对象是不可见的匿名对象,不会出现在你的源码中,但是程序在运行 ...
- C++返回值优化
返回值优化(Return Value Optimization,简称RVO)是一种编译器优化机制:当函数需要返回一个对象的时候,如果自己创建一个临时对象用于返回,那么这个临时对象会消耗一个构造函数(C ...
- 返回值优化(RVO)
C++的函数中,如果返回值是一个对象,那么理论上它不可避免的会调用对象的构造函数和析构函数,从而导致一定的效率损耗.如下函数所示: A test() { A a; return a; } 在test函 ...
- GCC:条件判断中赋值语句和函数结尾时无返回值的警告
有下面非常经典的一个字符串复制程序. test1.c #include <stdio.h> int main() { char str_t[]="This String come ...
- 【M20】协助完成“返回值优化(RVO)”
1.方法返回对象,会导致临时对象的产生,这降低了效率,const Rational operator* (const Rational& lhs,Rational& rhs).有没有什 ...
- [More Effective C++]条款22有关返回值优化的验证结果
(这里的验证结果是针对返回值优化的,其实和条款22本身所说的,考虑以操作符复合形式(op=)取代其独身形式(op),关系不大.书生注) 在[More Effective C++]条款22的最后,在返回 ...
- C++返回值优化RVO
返回值优化,是一种属于编译器的技术,它通过转换源代码和对象的创建来加快源代码的执行速度.RVO = return value optimization. 测试平台:STM32F103VG + Keil ...
- JMeter(7) 优化判断返回类型和返回值
之前判断接口类型和返回值用beanshell,可见JMeter(5)-JMeter之BeanShell使用 优化点 接口测试里面对返回字段的类型验证和值验证为基本需求,将方法导成jar文件,导入之后方 ...
随机推荐
- ol3对地图上某些特定的经纬度进行标注
最终效果需要类似于这种 1.首先我们需要一个最基本的地图,这一步骤可以浏览该分类下的上一篇随笔. 2.ol3支持的文件格式有.geojson,我们需要将坐标制作成符合这种格式的样子才能被ol3识别并显 ...
- Python 正则表达式学习
摘要 在正则表达式中,如果直接给出字符,就是精确匹配. {m,n}? 对于前一个字符重复 m到 n 次,并且取尽可能少的情况 在字符串'aaaaaa'中,a{2,4} 会匹配 4 个 a,但 a{2, ...
- CF983B XOR-pyramid
设\(xorx[l][r]\)表示题目中\(f(l,r)\)的值,则可以得出 \[ xorx[i][j]=xorx[i][j-1] \oplus xorx[i+1][j] \] 设\(maxx[l][ ...
- Visual Studio 安装easyX且导入graphics库后,outtextxy提示未定义标示符
1.点击 “项目” ,然后点击 “属性”. 2. 然后点击左侧 “配置与属性” 下的 “常规” ,在点击 “字符集” ,选择 “使用多字节字符集” 即可解决问题
- 【matlab】笔记_1
基本操作 ans 最近计算的答案 clc 清除命令行窗口 diary 将命令行窗口文本保存到文件中 矩阵 用逗号 (,) 或空格分隔各行元素. 用分号(;)分隔各列元素. a':装置矩阵. 要执行元素 ...
- Shiro学习笔记(二)
首先还是先搭建工程运行环境 依旧搭建的是Maven工程,如果不是Maven 也可以去网上找jar包然后导入 (我使用Maven主要是找依赖配置文件就行,我自己导jar包的时候就是很容易报错) 还是先 ...
- 【ASP.NET】System.Web.Routing - Route Class
Provides properties and methods for defining a route and for obtaining information about the route. ...
- Docker:Containers
Prerequisites Install Docker version 1.13 or higher. Read the orientation in Part 1. Give your envir ...
- Terminal run py文件
cd Documents cd PythonCode python3 hello.py Text Editor: Atom Atom 可以用来写 python 脚本 (文件后缀名 .py). 但是不用 ...
- React内三种函数的写法
以下提供三种React内函数的写法,都可以正常运行,有疑问可以留言 写法一:让函数内部的this指向这个类的实例,它是用bind实现的,bind的第一个参数表示context,就是this. //写 ...