一名AI算法工程师,热爱生成式模型和具身智能.
静态链接的出现,提高了程序的模块化水平。对于一个大的项目,不同的人可以独立地测试和开发自己的模块。通过静态链接,生成最终的可执行文件。
但是在多进程的背景下,静态链接的缺点就显示出来了。
想象这样一种情况,一个程序使用了glibc标准库,现在计算机中同时运行着该程序的100个进程。那么,每个进程中都会有一份glibc,操作系统需要在真实的物理内存中加载100份glibc,浪费了很多内存。
在kernel执行过程中,执行了两个相互独立的索引映射。
第一个映射比较简单,就是根据线程索引映射到原始矩阵的全局内存地址。
分成两步完成,第一步是映射到矩阵的坐标。
当初选择技术作为职业方向时,怀着技术改变世界的理想。
入行后,慢慢地,一种声音总在耳边来回响,那就是技术要服务业务。
好像这个说法也没毛病,毕竟这样才能体现技术的价值。
一句话,左值可以取地址、位于等号左边;而右值没法取地址,位于等号右边。
int a = 5;
做一只北极熊
冬季来临时
在山坡向阳处挖个洞
钻进去
keyword arguments有两个含义。
这里的含义是说,你可以在调用函数时,通过key=value这种方式,指定某个参数的值。这里,你不用关心这个参数是不是positional arguments,以及有没有默认值。
唯一的要求是,这些key=value要在没有名字的positional arguments后面。
核心是理解 x &(x-1) 的作用是把x的最低位的1置零。
def countOnes(x: int) -> int:
ones = 0
while x > 0:
x &= (x - 1)
ones += 1
return ones
计算一个数的1比特位的个数。然后依次计算即可。