标签: memory-management

malloc()和free()如何工作?

我想知道如何mallocfree工作.

int main() {
    unsigned char *p = (unsigned char*)malloc(4*sizeof(unsigned char));
    memset(p,0,4);
    strcpy((char*)p,"abcdabcd"); // **deliberately storing 8bytes**
    cout << p;
    free(p); // Obvious Crash, but I need how it works and why crash.
    cout << p;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

如果答案在记忆水平上是深入的,如果可能的话,我将非常感激.

c c++ malloc free memory-management

263
推荐指数
9
解决办法
14万
查看次数

如何免费使用Inode?

我有一个磁盘驱动器,inode使用率为100%(使用df -i命令).但是,在大幅删除文件后,使用率仍为100%.

这样做的正确方法是什么?

如果磁盘空间使用量较少的磁盘驱动器可能比磁盘空间使用率较高的磁盘驱动器具有更高的Inode使用率,那怎么可能?

如果我压缩很多文件会减少使用的inode数量吗?

unix linux inode memory-management

249
推荐指数
6
解决办法
45万
查看次数

弱引用和无引用引用之间有什么区别?

斯威夫特有:

  • 强引用
  • 弱参考
  • 无主参考文献

无主参考如何与弱参考不同?

什么时候使用无主参考安全?

无主引用是否存在安全风险,如C/C++中的悬空指针

memory-management weak-references automatic-ref-counting dangling-pointer swift

232
推荐指数
4
解决办法
7万
查看次数

Python进程使用的总内存?

有没有办法让Python程序确定它当前使用了多少内存?我已经看过有关单个对象的内存使用情况的讨论,但我需要的是进程的总内存使用量,以便我可以确定何时需要开始丢弃缓存数据.

python memory-management

229
推荐指数
10
解决办法
20万
查看次数

C++ new int [0] - 它会分配内存吗?

一个简单的测试应用:

cout << new int[0] << endl;
Run Code Online (Sandbox Code Playgroud)

输出:

0x876c0b8
Run Code Online (Sandbox Code Playgroud)

所以它看起来很有效.标准对此有何看法?"分配"空白内存块总是合法的吗?

c++ memory-management standards-compliance new-operator

228
推荐指数
4
解决办法
6万
查看次数

是否允许删除?

是否允许delete this;delete-statement是将在该类实例上执行的最后一个语句?当然,我确信this-pointer所代表的对象是newly-created.

我在考虑这样的事情:

void SomeModule::doStuff()
{
    // in the controller, "this" object of SomeModule is the "current module"
    // now, if I want to switch over to a new Module, eg:

    controller->setWorkingModule(new OtherModule());

    // since the new "OtherModule" object will take the lead, 
    // I want to get rid of this "SomeModule" object:

    delete this;
}
Run Code Online (Sandbox Code Playgroud)

我可以这样做吗?

c++ memory-management new-operator self-destruction delete-operator

225
推荐指数
8
解决办法
10万
查看次数

.so,.la和.a库文件有什么区别?

我知道.so文件是一种动态库(许多线程可以共享这些库,因此不需要在内存中有多个副本).但是.a和之间有什么区别.la?这些都是静态库吗?

如果动态库比静态库有很大的优势,为什么还有很多静态库呢?

我还想知道加载库(两种类型)的基本机制,以及在某个地方使用它时如何调用lib中的一段代码.我应该学习哪一部分内核?我应该知道哪些相关的Linux命令/实用程序才能知道进程是如何运行的?(我现在才知道ld命令)

我什么时候应该尝试构建代码.so.a?哪一个更好?

[mirror@home ins_openvpn]$ ls lib/openvpn/plugins/ -l
total 96
-rw-r--r-- 1 mirror mirror 22892 Sep  2 23:25 openvpn-plugin-auth-pam.a
-rwxr-xr-x 1 mirror mirror   931 Sep  2 23:25 openvpn-plugin-auth-pam.la
-rwxr-xr-x 1 mirror mirror 23621 Sep  2 23:25 openvpn-plugin-auth-pam.so
-rw-r--r-- 1 mirror mirror 17228 Sep  2 23:25 openvpn-plugin-down-root.a
-rwxr-xr-x 1 mirror mirror   932 Sep  2 23:25 openvpn-plugin-down-root.la
-rwxr-xr-x 1 mirror mirror 18805 Sep  2 23:25 openvpn-plugin-down-root.so
Run Code Online (Sandbox Code Playgroud)

linux memory-management shared-libraries ld static-libraries

216
推荐指数
1
解决办法
11万
查看次数

@property在Objective-C中保留,赋值,复制,非原子

作为Objective-C的新手,有人可以按照@property指令给我一个概述保留,分配,复制和我缺少的任何其他内容吗?他们在做什么,为什么我要用另一个?

iphone memory-management objective-c ios

211
推荐指数
4
解决办法
18万
查看次数

为什么ARC仍然需要@autoreleasepool?

在大多数情况下使用ARC(自动引用计数),我们不需要考虑使用Objective-C对象的内存管理.不允许再创建NSAutoreleasePools,但是有一个新的语法:

@autoreleasepool {
    …
}
Run Code Online (Sandbox Code Playgroud)

我的问题是,当我不应该手动释放/自动释放时,为什么我需要这个呢?


编辑:总结我从所有的答案和评论中得到的简洁:

新语法:

@autoreleasepool { … } 是新的语法

NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
…
[pool drain];
Run Code Online (Sandbox Code Playgroud)

更重要的是:

  • ARC使用autorelease以及release.
  • 它需要一个自动释放池才能这样做.
  • ARC不会为您创建自动释放池.然而:
    • 每个Cocoa应用程序的主线程都有一个自动释放池.
  • 有两种情况你可能想要使用@autoreleasepool:
    1. 当您在辅助线程中并且没有自动释放池时,您必须自己制作以防止泄漏,例如myRunLoop(…) { @autoreleasepool { … } return success; }.
    2. 当你想创建一个更本地的游泳池时,正如@mattjgalloway在他的回答中所示.

memory-management objective-c xcode4.2 automatic-ref-counting

191
推荐指数
4
解决办法
7万
查看次数

在.NET中使用后将对象设置为Null/Nothing

完成后,是否应该将所有对象设置为null(Nothing在VB.NET中)?

我理解在.NET中必须处理实现IDisposable接口的任何对象实例以释放一些资源,尽管对象在处理之后仍然可以是某种东西(因此isDisposed表单中的属性),所以我认为它仍然可以驻留在记忆中还是至少部分?

我也知道当一个对象超出范围时,它会被标记为收集准备好下一次垃圾收集器的传递(虽然这可能需要时间).

因此,考虑到这一点,将其设置为null加速系统释放内存,因为它不必解决它不再在范围内并且它们是否有任何不良副作用?

MSDN文章从未在示例中执行此操作,目前我这样做是因为我无法看到它的危害.但是我遇到了各种意见,所以任何评论都是有用的.

.net c# vb.net null memory-management

184
推荐指数
8
解决办法
9万
查看次数