В ОЗУ, имеющем четыре типа (проводная память, активная память, неактивная память, свободная память)Как очистить RAM программно какао?
Я получил значение этой памяти четырех типов. но я хочу очистить RAM. как можно очистить RAM программно в объективе-c?
вот часть кода:
#import <sys/sysctl.h>
#import <mach/host_info.h>
#import <mach/mach_host.h>
#import <mach/task_info.h>
#import <mach/task.h>
#import "AppDelegate.h"
@interface AppDelegate()
@property (weak) IBOutlet NSWindow *window;
@property (weak) IBOutlet NSView *myview ,*view2;
@end
@implementation AppDelegate
@synthesize myview;
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
int mib[6];
mib[0] = CTL_HW;
mib[1] = HW_PAGESIZE;
int pagesize;
size_t length;
length = sizeof (pagesize);
if (sysctl (mib, 2, &pagesize, &length, NULL, 0) < 0)
{
fprintf (stderr, "getting page size");
}
mach_msg_type_number_t count = HOST_VM_INFO_COUNT;
vm_statistics_data_t vmstat;
if (host_statistics (mach_host_self(), HOST_VM_INFO, (host_info_t) &vmstat, &count) != KERN_SUCCESS)
{
fprintf (stderr, "Failed to get VM statistics.");
}
// double total = vmstat.wire_count + vmstat.active_count + vmstat.inactive_count + vmstat.free_count;
// double wired = vmstat.wire_count/total;
// double active = vmstat.active_count/total;
// double inactive = vmstat.inactive_count/total;
// double free = vmstat.free_count/total;
task_basic_info_64_data_t info;
unsigned size = sizeof (info);
task_info (mach_task_self(), TASK_BASIC_INFO_64, (task_info_t) &info, &size);
double unit = 1024 * 1024;
//
// NSString *resultstring = [NSString stringWithFormat: @"% 3.1f MB\n% 3.1f MB\n% 3.1f MB", vmstat.free_count * pagesize/unit, (vmstat.free_count + vmstat.inactive_count) * pagesize/unit, info.resident_size/unit]; NSLog(@"%fGB",total);
NSLog(@"Free :% 3.1fMB",vmstat.free_count * pagesize/unit);
NSLog(@"wired :% 3.1fMB",vmstat.wire_count * pagesize/unit);
NSLog(@"active :% 3.1fMB",vmstat.active_count * pagesize/unit);
NSLog(@"inactive :% 3.1fMB",vmstat.inactive_count * pagesize/unit);
}
Почему вы хотите это сделать? Большая часть этой памяти может быть очищена только путем уничтожения всех остальных процессов, запущенных в системе. Это не очень практично. Большинство оставшихся будет использоваться кэшами ОС, и вы не можете сделать это, чтобы повлиять на них, даже если у вас есть веские основания для этого. – Avi
Если ваш процесс является корневым, то 'execl ("/sbin/shutdown "," shutdown "," now ");' очистит всю RAM для вас. Если вы ищете что-то еще, что вы подразумеваете под «четкой оперативной памятью»? –
Я создаю приложение, подобное очистке памяти, поэтому я хочу делать программно. –