首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >内存访问的回调?

内存访问的回调?
EN

Stack Overflow用户
提问于 2011-06-02 14:58:27
回答 4查看 3K关注 0票数 5

有没有办法在访问(读或写)内存时分配一些内存并进行某种回调(可以是指向函数或信号的指针)?

例如,如果我说分配1mb的内存,我希望有一种方法来调用一个函数,当这1mb中的任何一个被访问时。

我正在使用的平台是x86 Linux,用C/C++编写。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-06-02 15:05:55

是的,有。

使用mprotect(2)系统调用(参见:http://linux.die.net/man/2/mprotect)在页面上设置只读或无访问内存保护,并设置访问内存时将调用的SIGEGVsignal处理程序。

请注意,您将需要在您的信号处理程序中使用mprotect,以便在调用您的信号处理程序后实际允许内存访问,并且当您这样做时,您将打开一个窗口,以便在您不知道的情况下访问内存,例如从不同的线程。这可能是一个问题,也可能不是一个问题,这取决于您的特定用途。

票数 7
EN

Stack Overflow用户

发布于 2011-06-02 15:05:00

您可以使用自己版本的“安全指针”-like类,该类将包装已分配的指针,顺便说一句,它将有一个取消引用操作符的实现。然而,它需要使用它作为分配的原因。

这几行中的一些内容:

代码语言:javascript
运行
复制
// based on pretty standard auto_ptr
template <class T> class auto_ptr
{
    T* ptr;
public:
    explicit auto_ptr(T* p = 0) : ptr(p) {}
    ~auto_ptr()                 {delete ptr;}
    T& operator*()              {return *ptr;}   // <<--- add your stuff here
    T* operator->()             {return ptr;} // <<--- and here
    // .
};
票数 3
EN

Stack Overflow用户

发布于 2011-06-02 15:05:24

我不认为有这样的API可以做到这一点,直到您在分配的内存周围创建了一个包装器对象,然后通过这个包装器对象访问内存。然后这个包装器对象将能够看到对底层内存的所有访问。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6211429

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档