我想知道如何malloc和free工作.
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)
如果答案在记忆水平上是深入的,如果可能的话,我将非常感激.
我有一个磁盘驱动器,inode使用率为100%(使用df -i命令).但是,在大幅删除文件后,使用率仍为100%.
这样做的正确方法是什么?
如果磁盘空间使用量较少的磁盘驱动器可能比磁盘空间使用率较高的磁盘驱动器具有更高的Inode使用率,那怎么可能?
如果我压缩很多文件会减少使用的inode数量吗?
有没有办法让Python程序确定它当前使用了多少内存?我已经看过有关单个对象的内存使用情况的讨论,但我需要的是进程的总内存使用量,以便我可以确定何时需要开始丢弃缓存数据.
一个简单的测试应用:
cout << new int[0] << endl;
Run Code Online (Sandbox Code Playgroud)
输出:
0x876c0b8
Run Code Online (Sandbox Code Playgroud)
所以它看起来很有效.标准对此有何看法?"分配"空白内存块总是合法的吗?
是否允许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
我知道.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
作为Objective-C的新手,有人可以按照@property指令给我一个概述保留,分配,复制和我缺少的任何其他内容吗?他们在做什么,为什么我要用另一个?
在大多数情况下使用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)
更重要的是:
autorelease以及release.@autoreleasepool:
myRunLoop(…) { @autoreleasepool { … } return success; }.memory-management objective-c xcode4.2 automatic-ref-counting
完成后,是否应该将所有对象设置为null(Nothing在VB.NET中)?
我理解在.NET中必须处理实现IDisposable接口的任何对象实例以释放一些资源,尽管对象在处理之后仍然可以是某种东西(因此isDisposed表单中的属性),所以我认为它仍然可以驻留在记忆中还是至少部分?
我也知道当一个对象超出范围时,它会被标记为收集准备好下一次垃圾收集器的传递(虽然这可能需要时间).
因此,考虑到这一点,将其设置为null加速系统释放内存,因为它不必解决它不再在范围内并且它们是否有任何不良副作用?
MSDN文章从未在示例中执行此操作,目前我这样做是因为我无法看到它的危害.但是我遇到了各种意见,所以任何评论都是有用的.