FrankHB 最近的时间轴更新
↓挽……
115 天前
FrankHB

FrankHB

V2EX 第 34994 号会员,加入于 2013-02-28 10:06:28 +08:00
FrankHB 最近回复了
补上漏了的结论:严格意义上 memory 叫内存不合适。但是手机的存储空间实际上是内存+外存,把存储和内存对立技术上也是错的。
程序员还应该注意内存使用到非主存的物理实现。主要编程语言通常只能操作默认的地址空间,不可能排除寄存器和缓存,甚至连 swap 都不保证能可移植地排除(一个副作用是按字节访存忽略内存延迟都不保证 O(1),悲……)。

存储容量单位的差异不重要。钦定用 IEEE 词头就不会有歧义了。不精确更多是系统 UI 惯出来的。
但是不是所有存储都支持按字节寻址。这个意义上倒是更应该注意,空间上 1B 和几 bit 没有固定换算关系。常用体系结构默认 1B=8bit ,但是并非一直如此。ISO C/C++支持至少 8bit 。POSIX 重新限制回 8bit 。而具体存储介质上就更不固定,比如算上纠错码,光存储的 1B 实际可以超过 10bit 。

题外话:WM 时代时的 ROM 空间就已经被叫 internal memory 了。这才是“内存”的正经原文。

@catalysia 需要纠正一个错误:不是所有联机的存贮设备都可以叫做内存。
上面提过内存和外存的界限是能力而非联机状态。对冯·诺依曼机,能力指能被控制器直接访问,你的例子中需要另外的设备翻译 I/O 请求,就都不算内存。只是现在大多数都是混入了缓存的修改哈佛结构,算是加了不少飞线,甚至还有两用的设备(比如傲腾),这个情况才真正在体系结构上模糊界限。这个界限通常在 ISA 之下(缓存对 ISA 以上原则不可见)。ISA 的编程接口向上可以虚拟出内存设备,但已经不算是冯·诺依曼机了——而是更具体的寄存器-存储机和其它具体编程语言对应的抽象机。
大多数程序员仍然需要了解的组成原理科普:

每个程序员基本迟早都得了解存储的层次体系(memory hierarchy) :寄存器(register) 、缓存(cache)、主存(main/primary memory) 、辅存(secondary memory) ,即便大多数语言完全不区分其中的种类,但是对实际质量影响太大了做不到全部无视。
但仍然应该注意通用语言不鼓励你强行区分实现细节,所以讲 memory ,程序员首先需要理解可能是以上的任何一种——即便 main memory 是主流实现的最常接触的 memory ,也不应该混同。
memory 比较正常的翻译就是“存储”( storage:存贮)。对面的“记忆体”也还行。“内存”是个很差的翻译,本义是在线存储(online memory),指 secondary memory 前的 hierarchy 。但是约定俗成对应 memory 也罢了。对应的“外存”是指离线(offline) 存储。离线是指能力(capability) ,而不是指状态,所以你硬盘就算一直加电联机也叫外存。内存和外存指一般用途,是和存储体系并列的分类。

另一种分类关于物理特性。最主要的大类是易失(volatile)/非易失(non-volatile)。外存要求使用易失存储实现。具体元件分为锁存器 /SRAM/DRAM/ROM 等等,这些和存储体系不完全正交,但属于另外的分类。

大多数情况下,主存是使用 DRAM 实现的物理内存。这是操作系统或者独立(freestanding)实现(或称为 bare-metal )的应用会看到的主存视图。对应用,典型情况使用虚拟内存空间,即经过被支持地址翻译(通过 MMU )的体系结构地址翻译映射的空间。这些空间实际来自于物理内存以及辅存中的交换空间(swap)。有些实现,如 IBM system i 直接使用 128-位地址空间,把主存和辅存都编址到同一个地址空间提供给应用。大部分常见实现都仍然不支持以相同的方式访问主存和辅存。
值得一提的是,辅存可能不是外存。虽然罕见,辅存也可能是易失存储并作为内存,例如 NDS 的 Slot-2 扩展 RAM 卡。使用这类扩展内存通常需要一些特殊的编程技术。

@seanzxx 这个图虽然罗列了不少要点,但是都放在一起技术上并不正确。另外,一些实现其实会按驱动类(driver class)区分设备,而并不对应图中的具体分类。这种分类下设备可能是虚拟的。

把主存叫做运行内存技术上不算错,但根本是冗余的。
5 天前
回复了 BrightLiao 创建的主题 程序员 好代码的五个特质 - CUPID
看到 U 就不用看了。UNIX 哲学本来就一大滩糊涂账,能直接整个拎过来当锤子抡的直接盲猜没理解什么 UNIX 哲学的外延——果然不会冤枉。
所谓一个程序做一件事不就是 SRP ?而一坨命令行参数什么时候成了正面示范了?不就是你 shell 语言弱鸡才让程序自己 parse 命令行参数?而这正好不就是混淆 shell 和 shell 应用的 SRP 的反面教材?真扯 purpose ,你能先整个允许把 purpose 定义为程序实体作为 first-class object 传的像样的语言代替 shell 再吹好不?
UNIX 还有一坨 everthing is a file 和 file 内容默认一坨文本的垃圾习惯。比如你写代码要按照那坨文本厨二排除 BOM 那实际上就是故意 type unsafety 双标搞事。幸亏原作者的脑洞这里还不够大教坏小朋友。
UNIX 哲学还包括信任程序员,该 UB 时就 UB ,这直接和“与期望一致的行为”矛盾。目的论上,被 WG21 的 narrowing contract considered harmful 之类的教条吊打。
DDD 该用的地方基本就是 D 出来应付外行;其它情形就是拖延简化问题的义务,让自己装作外行,这经常根本就是反模式——譬如说,增加一大坨不 man 就别想清楚干啥、又跟其它命令不通用的 domain-specific “专业”命令行选项。没有对滥用打预防针就是失败的,joyful 那是想多了。

SOLID 虽然日用混沌到像空话,至少 LSP 之类还是有坚实的理论基础的。就这点漏洞百出的理解,这坨 joyful 何德何能跟 SOLID 碰瓷?
在做一个像样的推广 UI (看来还依赖 Chrome 系的……)前请先拼写对 World 。
……看了下,官网里 run Hello World 标题是对的,示例代码里没拼对。
8 天前
回复了 roseduan 创建的主题 程序员 程序员不应该和一门语言绑定在一起
@Suddoo @iosyyy .
节约铜币,直接挂 gist 。
8 天前
回复了 roseduan 创建的主题 程序员 程序员不应该和一门语言绑定在一起
@Building 加上镰刀,可以绑定装备了……

@Aloento 变成桶子去找 coser ,多好(

@Suddoo 提到 Java 就让你想到辩护,而不是第一时间 me too 自己发现罄竹难书的问题,这种对思考能力的摧毁效果就够臭了。
正常的语言基本都是要么没人用要么都会骂。提到缺陷一头雾水的,几乎可以断定用得不够多和不够熟练。
至于别人骂的具体什么对你就未必那么重要了。比如我会骂所有静态类型语言设计残废,因为遇到类型系统的局限性我不能直接在语言里扩充而需要换语言,浪费时间看这些设计还不爽。比如连同像性都没还需要特设什么反射的傻大个看着就二。再如一开始设计者拎清楚常识没给 lambda 没 closure 就硬塞什么 class 什么 method ,结果事后跪舔又加进去的,增加维护 spec 和实现工作量的弱鸡语言就是该骂。又如钦定全局 GC 还有脸写客户端 GUI 应用逼最终用户调优的就是寻衅滋事。我都觉得特意针对 Java 掉价(甚至我对 Gosling 表示嫌弃因为他对 vi 有贡献而不是发明了 Java 都够了),然而这些 Java 就是不能免俗,还是典型恶俗代表。
但是我说的对你有意义么?你来混婊语言界?
8 天前
回复了 Ranni 创建的主题 Windows 求助各位用 Windows 笔记本的程序员
@ipcjs 经验如此。我没具体 profile ,不过我猜跟操作进程开销的多少有些类似,Windows 应用操作文件用的 API 经常套娃太多层了,干了很多不需要干的活,不像 Linux 本机应用一般系统调用往上 libc 套一层搞定。不过差距不会像创建进程那么夸张。当然资源管理器慢起来那是真的慢……有时候我都直接 dolphin& 了。
15 天前
回复了 Ranni 创建的主题 Windows 求助各位用 Windows 笔记本的程序员
我是 Windows11 的 SB2 (这个实例有毒,Win10 时就 80072F8F 没法自动更新和进商店,更新 Win11 便笺也废了,一直懒得全新重装),因为屏幕好使,远程 Win10 的 G14 ,开发环境 MSYS2+WSL1(Arch+KDE)。VMWare 备用。
只要日常不是写内核驱动 /FUSE/systemd/个别系统调用 /依赖显卡加速或具体外设 /非 x64 应用,WSL1 基本爆杀全场,还不用担心滚挂……(虽然但是最近 node SIGILL 挂了好像还没解法)……最欠抽的小文件性能也比原生 Windows 强得多。原生 Windows 和 WSL2 或者虚拟机都要吃点各种性能的亏,要再快你就基本只能直接原生 Linux (但反过来要部署到 Windows 就基本得要虚拟机了,Wine 还是太感人)。
关于   ·   帮助文档   ·   API   ·   FAQ   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   3479 人在线   最高记录 5497   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 12ms · UTC 10:15 · PVG 18:15 · LAX 03:15 · JFK 06:15
Developed with CodeLauncher
♥ Do have faith in what you're doing.