为什么OS X 10.6.8中的host_statistics64()(我不知道其他版本是否存在此问题)返回的计数是免费,活动,非活动和有线内存,这些内存不会超过ram的总数?为什么它缺少不一致的页数?
以下输出表示十秒钟内未分类为空闲,活动,非活动或有线的页面数(大约每秒采样一次).
458
243
153
199
357
140
304
93
181
224
Run Code Online (Sandbox Code Playgroud)
产生上述数字的代码是:
#include <stdio.h>
#include <mach/mach.h>
#include <mach/vm_statistics.h>
#include <sys/types.h>
#include <sys/sysctl.h>
#include <unistd.h>
#include <string.h>
int main(int argc, char** argv) {
struct vm_statistics64 stats;
mach_port_t host = mach_host_self();
natural_t count = HOST_VM_INFO64_COUNT;
natural_t missing = 0;
int debug = argc == 2 ? !strcmp(argv[1], "-v") : 0;
kern_return_t ret;
int mib[2];
long ram;
natural_t pages;
size_t length;
int i;
mib[0] = CTL_HW;
mib[1] = HW_MEMSIZE;
length …Run Code Online (Sandbox Code Playgroud) 我有一个具有以下成员函数的类:
/// caller pid
virtual pid_t Pid() const = 0;
/// physical memory size in KB
virtual uint64_t Size() const = 0;
/// resident memory for this process
virtual uint64_t Rss() const = 0;
/// cpu used by this process
virtual double PercentCpu() const = 0;
/// memory used by this process
virtual double PercentMemory() const = 0;
/// number of threads in this process
virtual int32_t Lwps() const = 0;
这个类的职责是返回有关调用者的进程信息.物理内存大小可以通过sysctl调用轻松确定,而pid是微不足道的,但除了在ps或top上调用popen并解析输出之外,其余的调用都没有找到 - 这是不可接受的.任何帮助将不胜感激.
要求:
在g ++ 4.0上编译
没有obj-c
OSX …
我已经能够注册我自己的机器端口以捕获我的应用程序中的机器异常,并且当我以32位为目标时它可以很好地工作.但是,当我以64位为目标时,我的异常处理程序catch_exception_raise()被调用,但传递给处理程序的异常代码数组是32位宽.预计这是32位版本,但不是64位版本.
在我捕获EXC_BAD_ACCESS第一个代码的情况下是错误号,第二个代码应该是错误的地址.由于第二个代码是32位宽,因此64位错误地址的高32位被截断.
我发现了一个标志<mach/exception_types.h>,我可以在通task_set_exception_ports()称为MACH_EXCEPTION_CODES从看达尔文源似乎控制传递给处理程序代码的大小.它似乎意味着要传递给传入的行为task_set_exception_ports().
但是,当我执行此操作并触发异常时,我的机器端口会收到通知,我调用exc_server()但我的处理程序永远不会被调用,并且当回复消息被发送回内核时,我得到默认的异常行为.
我的目标是10.6 SDK.
我真的希望苹果能更好地记录这些东西.有人有主意吗?
是否有一个易于使用的工具链来编译来自Linux的Darwin(mac的OS)代码?
例如,我想在Linux机器上编译libpcap(或tcpdump)并在我的MAC上运行.我遇到过,osxcross但它需要获得Xcode SDK等,有没有人试过这个?
谢谢.
在Darwin上,POSIX标准clock_gettime(CLOCK_MONOTONIC)计时器不可用.相反,最高分辨率的单调计时器是通过mach_absolute_time函数获得的mach/mach_time.h.
返回的结果可能是来自处理器的未调整的滴答计数,在这种情况下,时间单位可能是奇怪的倍数.例如,在具有33MHz滴答计数的CPU上,Darwin返回1000000000/33333335作为返回结果的确切单位(即,乘以该mach_absolute_time分数以获得纳秒值).
我们通常希望将精确刻度转换为"标准"(十进制)单位,但不幸的是,即使在64位算术中,绝对时间乘以分数也会溢出.这是苹果公司唯一的文件归属mach_absolute_time于(技术问答QA1398).1
我该如何编写正确使用的函数mach_absolute_time?
mach_timebase_info始终返回1/1作为缩放因子,因为CPU的原始滴答计数不可靠(动态速度步进),因此API会为您进行缩放.在PowerPC Mac上,mach_timebase_info返回1000000000/33333335或1000000000/25000000,因此Apple提供的代码每隔几分钟就会溢出一次.哎呀.我一直在使用arc4random()和arc4random_uniform(),我总觉得它们不是完全随机的,例如,我是从一个数组中随机选择值,但是当我生成它们时,经常出现的值是相同的连续多次,所以今天我认为我会使用Xcode游乐场来看看这些函数是如何表现的,所以我首先测试arc4random_uniform来生成0到4之间的数字,所以我使用了这个算法:
import Cocoa
var number = 0
for i in 1...20 {
number = Int(arc4random_uniform(5))
}
Run Code Online (Sandbox Code Playgroud)
我跑了几次,这里是大多数时候价值观的变化:

因此,您可以看到值重复增加和减少,并且一旦值处于最大值/最小值,它们通常会在特定时间内保持不变(请参阅第5步中的第一个屏幕截图,值在6期间保持为3)步骤,问题是它一点都不寻常,在我的测试中,函数实际上大部分时间都是这样.
现在,如果我们看一下arc4random(),它基本上是一样的:

所以这是我的问题:
谢谢.
编辑:
最后,我做了两个令人惊讶的实验,第一个带有真正的骰子:

让我感到惊讶的是,我不会说它是随机的,因为我看到了与arc4random()和arc4random_uniform()所描述的非随机相同的模式,所以Jean-BaptisteYunès指出,人类不好看,数字序列是否真的是随机的.
我还想做一个更"科学"的实验,所以我做了这个算法:
import Foundation
var appeared = [0,0,0,0,0,0,0,0,0,0,0]
var numberOfGenerations = 1000
for _ in 1...numberOfGenerations {
let randomNumber = Int(arc4random_uniform(11))
appeared[randomNumber]++
}
for (number,numberOfTimes) in enumerate(appeared) {
println("\(number) appeard \(numberOfTimes) times (\(Double(numberOfGenerations)/Double(numberOfTimes))%)")
}
Run Code Online (Sandbox Code Playgroud)
要查看每个数字出现的次数,并且有效地数字是随机生成的,例如,这里是控制台的一个输出:
0出现99次.
1次出现了97次.
2次出现了78次.
3次出现了80次.
4次出现了87次.
5次出现107次.
6次出现了86次.
7次出现了97次.
8次出现了100次.
9次出现91次. …
在Swift 2.2中阅读Darwin库时,我发现下面的代码.
@warn_unused_result
@_silgen_name("_swift_Darwin_sem_open2")
internal func _swift_Darwin_sem_open2(
name: UnsafePointer<CChar>,
_ oflag: CInt
) -> UnsafeMutablePointer<sem_t>
Run Code Online (Sandbox Code Playgroud)
第二行的'@_silgen_name'是什么?
我从这里找到了以下信息,但我想要更多详细信息,比如Apple Developer Library.
如果它只是您要从C调用的一组特定Swift函数,则可以使用@_silgen_name属性覆盖损坏的名称,和/或使它们@convention(c)使用C调用约定.
拉我的头发去CFNotificationCenterAddObserver斯威夫特工作.
CFNotificationCenterAddObserver(CFNotificationCenterGetDarwinNotifyCenter(),
UnsafePointer<Void>(self),
iosLocked,
"com.apple.springboard.lockcomputer" as CFString,
nil,
CFNotificationSuspensionBehavior.DeliverImmediately)
Run Code Online (Sandbox Code Playgroud)
在iOS的文档有它上市,我已经尝试了回调,并没有成功的不安全指针无数的迭代.
上面的函数调用导致出现此错误消息,这似乎是正确的init:
Cannot invoke 'init' with an argument list of type '(CFNotificationCenter!, $T4, () -> (), CFString, NilLiteralConvertible, CFNotificationSuspensionBehavior)'
Run Code Online (Sandbox Code Playgroud)
我也尝试将objc桥接到这里,但是没有成功.
这是我的桥梁:
LockNotifierCallback.h:
#import <Foundation/Foundation.h>
@interface LockNotifierCallback : NSObject
+ (void(*)(CFNotificationCenterRef center, void *observer, CFStringRef name, const void *object, CFDictionaryRef userInfo))notifierProc;
@end
Run Code Online (Sandbox Code Playgroud)
和LockNotifierCallback.m:
#import "LockNotifierCallback.h"
static void lockcompleteChanged(CFNotificationCenterRef center, void *observer, CFStringRef name, const void *object, CFDictionaryRef userInfo) {
NSLog(@"success");
}
@implementation LockNotifierCallback
+ (void(*)(CFNotificationCenterRef center, …Run Code Online (Sandbox Code Playgroud) 在Mac OS X上,DYLD格式的二进制可执行文件包含"加载程序命令",用于指示库加载系统如何处理文件的内容.特别是,loader命令指示系统应该搜索依赖库,等等.
您可以通过运行"otool -l/path/to/your/app"查看系统上任何二进制文件的加载程序命令的完整列表.
一般来说,这些加载器命令是在项目编译的链接阶段由"ld"工具设置的.
我的问题是,我需要做什么才能为ld不支持(显然)的公开类型添加加载程序命令?
特别是,我想利用LC_DYLD_ENVIRONMENT加载器命令,该命令可用于在二进制文件的加载程序命令表中指定一个字符串,该字符串应加载并在可执行文件的上下文中作为环境变量设置进行评估.
我没有看到任何有助于此的论点.像"-sectcreate"这样的东西,但是为了特别添加到加载器命令的内容,就是我所追求的.
我知道这是可能的,因为Mac OS X上至少有一个标准应用程序使用它:Safari.但我不知道他们是否通过对二进制文件进行某种后链接按摩来实现这一点,如果他们使用自定义版本的ld知道如何构建和链接自定义加载器命令,或者他们是否正在利用ld命令的一般purpopse功能,我一直无法弄清楚.
我在项目中运行 Prisma 时遇到问题。运行npx prisma generate有效,但运行我的应用程序时我得到:
/Users/user/Desktop/project/node_modules/@prisma/client/runtime/index.js:36466
4:29:05 PM web.1 | throw new PrismaClientInitializationError(errorText, this.config.clientVersion);
4:29:05 PM web.1 | ^
4:29:05 PM web.1 | PrismaClientInitializationError: Query engine library for current platform "darwin" could not be found.
4:29:05 PM web.1 | You incorrectly pinned it to darwin
4:29:05 PM web.1 | This probably happens, because you built Prisma Client on a different platform.
4:29:05 PM web.1 | (Prisma Client looked in "/Users/user/Desktop/project/node_modules/@prisma/client/runtime/libquery_engine-darwin.dylib.node")
Run Code Online (Sandbox Code Playgroud)
我注意到该libquery_engine-darwin.dylib.node文件实际上以libquery_engine-darwin-arm64.dylib.node. 我的schema.prisma文件包括: …