使用valgrind调试自定义内存分配器时,“池”的作用是什么?

时间:2014-04-26 14:36:07

标签: memory-management garbage-collection valgrind

Valgrind documentation on debugging custom memory allocators基于一个叫做"池的抽象。"我在弄清楚如何使用游泳池方面遇到了一些麻烦。我最初的猜测是,因为我有一个相当简单的内存分配器(标记和清除垃圾收集器),我只能使用一个"池。"也许如果我有多个实体以不同的方式管理不同的内存,我会使用多个"池"?

我喜欢任何关于您如何使用游泳池的指导,或者您在应用程序中如何使用游泳池。

1 个答案:

答案 0 :(得分:1)

我在这里有点迟了。我了解到池只是我们分配的valgrind块的引用/锚点地址。在我的例子中,池是非常动态的(拆分堆),并且每当分配内存堆块时,我将其标记为noaccess(如文档所示),并且每当分配新对象(valgrind块)时,我调用带有池地址的from keras.models import Sequential from keras.layers import Dense from keras.wrappers.scikit_learn import KerasClassifier from sklearn.model_selection import StratifiedKFold from sklearn.model_selection import cross_val_score import numpy #Function to create model, required for KerasClassifier def create_model(): classifier = Sequential() classifier.add(Dense(12, input_dim=8, activation='relu')) classifier.add(Dense(8, activation='relu')) classifier.add(Dense(1, activation='sigmoid')) classifier.compile(optimizer = 'adam',loss="mean_squared_error") return model seed = 7 numpy.random.seed(seed) model = KerasClassifier(build_fn=create_model, epochs=100, batch_size=32, verbose=0) kfold = StratifiedKFold(n_splits=10, shuffle=True, random_state=seed) results = cross_val_score(model, X_train, y_train, cv=kfold) print(results.mean()) 。这使valgrind能够一次处理多个池。我们也可以直接销毁池,valgrind将自动释放它中的对象,然后当我们创建一个新的池时,valgrind知道新的对象不会重叠以前的对象,防止错误。

这是我的代码:https://github.com/eclipse/omr/pull/1311。 还有一个文档链接,其中包含我理解和使用api的方式。

相关问题