有没有办法在访问(读或写)内存时分配一些内存并进行某种回调(可以是指向函数或信号的指针)?
例如,如果我说分配1mb的内存,我希望有一种方法来调用一个函数,当这1mb中的任何一个被访问时。
我正在使用的平台是x86 Linux,用C/C++编写。
发布于 2011-06-02 15:05:55
是的,有。
使用mprotect(2)系统调用(参见:http://linux.die.net/man/2/mprotect)在页面上设置只读或无访问内存保护,并设置访问内存时将调用的SIGEGVsignal处理程序。
请注意,您将需要在您的信号处理程序中使用mprotect,以便在调用您的信号处理程序后实际允许内存访问,并且当您这样做时,您将打开一个窗口,以便在您不知道的情况下访问内存,例如从不同的线程。这可能是一个问题,也可能不是一个问题,这取决于您的特定用途。
发布于 2011-06-02 15:05:00
您可以使用自己版本的“安全指针”-like类,该类将包装已分配的指针,顺便说一句,它将有一个取消引用操作符的实现。然而,它需要使用它作为分配的原因。
这几行中的一些内容:
// 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
// .
};发布于 2011-06-02 15:05:24
我不认为有这样的API可以做到这一点,直到您在分配的内存周围创建了一个包装器对象,然后通过这个包装器对象访问内存。然后这个包装器对象将能够看到对底层内存的所有访问。
https://stackoverflow.com/questions/6211429
复制相似问题