也许这是一个简单的问题但我真的很想知道它.
如果我想在内存中的某个特定地址(堆中)存储一个值,比如一个int,我该怎么做?
说,我想将int值10存储在0x16.我想通过调用new或malloc来做到这一点:int*p = new int(10); 然后我想将存储的值的地址设置为0x16.起初我认为像&p = 0x16这样的东西,但这不起作用.我需要这样做以在内存中的某个值前面存储一些附加信息(之前通过malloc或new分配了内存空间).
我正在使用Linux和C++(但C也可以).
我想要实现的是:一个进程调用大小为x的malloc,我想在分配的内存前面存储一个特定的值(大小),所以我可以稍后访问该大小(调用free时).由于调用了malloc,我知道操作系统为该值分配空间的指针,我只想将指定内存的大小存储在指定内存前面的4个字节中.我所做的(在我编写的malloc钩子中)是分配更多内存(通过内部mallok调用)但我还需要能够在特定位置存储此大小值.
我感谢所有的帮助.
此页面告诉每当内存不足时,stable_sort缩减为具有运行时间O(n(log n)(log n))的就地算法:
复杂
如果有足够的额外内存可用,则第一个和最后一个之间的距离为线性:执行N*log 2(N)个元素比较(其中N是此距离),最多可执行多个元素移动.否则,该距离中的多线性:执行N*log 2 2(N)个元素比较,最多可执行多个元素交换.
我想将它与另一个具有相同运行时间的就地算法进行分析,因此我的问题简化为:我如何模拟"内存不足"以便执行较慢的算法stable_sort?
我想在Linux进程中的特定地址分配一块内存。实际上我想做一些类似的事情:我将有多个进程。每个进程都会调用库(由我编写)中的初始化函数,该函数将在进程的地址空间中分配一些内存(它将存储进程相关信息)。这将由每个进程完成
一旦分配了该内存,程序就会调用库中的其他函数。现在这些函数想要访问第一个函数分配的内存(包含进程相关信息)。
问题是我无法存储库中进程地址空间中分配的内存的地址(甚至不能存储在静态指针中,因为有多个进程),而且我什至不希望用户程序存储该地址。我只是不想让用户程序知道库在其地址空间中分配了内存。库函数对他们来说是抽象的,他们只能使用它们。
有没有可能克服这个问题。我在想,每当任何进程调用分配内存的库的初始化函数时,内存总是在所有进程中分配在相同的地址(比如 10000),而不管其他所有事情。
因此任何想要访问该内存的库函数都可以轻松地通过以下方式完成:
char *p=10000;
然后访问,访问的是调用库函数的进程的地址空间。