zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    ab(http)与abs(https)压测工具
    Q_DECLARE_PRIVATE与Q_DECLARE_PUBLIC
    QMetaObject::connectSlotsByName
    使用QStringBuilder进行字符串连接
    源码必须是UTF-8,QString需要它
    Qt开发中文显示乱码
    qDebug 的使用
    qt 4.6 qmake Reference
    qmake-variable-reference
    Qt学习网站
  • 原文地址:https://www.cnblogs.com/mull/p/8029253.html
Copyright © 2011-2022 走看看