Well, it turns out on most computers an address of the location and memory, aka a pointer, is itself 32 bits.
好的,它是一个计算机内存地址,或者说一个指针,占32位。
We're kind of restricting ourselves to only certain chunks of memory, at least for now, but it certainly creating problems.
我们现在我们自己只能在某一块内存中,至少是现在,当然这样也会产生问题。
Here's the problem with that technique, and by the way, a number of programming languages use this, including Lisp.
这会指向元素的值,然后对内存进行切分,关于这种技术有个问题,顺路说下。
You double click an icon, the program gets loaded into memory, well, conceptually where does your program end up?
双击一个图标,程序就被加载到内存中,那么,程序在哪里结束?
RAM is this memory recall or, as you'll soon find in problems Set One, that's used for ephemeral purposes.
内存是随机存储器,你们将,在习题集1中发现,它们用来短暂存储的目的。
So, you know, we've got a bunch of juicy topics to dive into this week involving pointers and memory.
这周我们有很多有趣的主题,包括指针和内存。
I've got some internal variables I have to store, what kinds of things do I have to keep track of?
计算的时候需要占用多少内存,我需要存储一些内部变量,我需要记录哪些东西呢?
One of the perhaps easiest ones to put your finger on is what if the computer is out of memory?
一个可能的情况是,计算机的内存不足?
Alright, so it turns out there're two other useful types that you don't get for free out of the box.
我们还是回到这里,还有两种很有用的数据类型,这两种都不用担心内存不足。
So now that we begin to have this ability to express strings in memory, to understand what they are, we can start to apply actually real-world algorithms to them.
现在我们开始用这个技能来在内存中表达字符串,来理解它们是什么,我们可以开始,我们可以对其使用实际的,现实生活中的算法。
There are absolutely going to be times where you're running a program where the programmer, say you, didn't possibly know in advanced how much RAM the program was going to need.
它们总是在,程序员运行程序的地方,你可能预先不知道那个程序,需要多少内存。
It turns out that slightly before the stack, slightly before this conceptual chunk of memory, there's other things called environment variables that we may see over time but elsewhere in memory are other things.
结果是稍微在堆之前,稍微在这个内存块概念之前,另外还一个东西叫做环境变量,我们之后可能看到,内存中的其他地方,是其他的东西。
I've been using the blackboard a little ad hoc here, but suppose I neaten things up here now and present this rectangle is let's say R RAM, the memory inside of your computer.
我在这里特别地使用这块黑板,假如我整理这些东西,把它们呈现,这个长方形,假如说就是内存,你电脑的内存。
Why not write the program in a way where you figure out dynamically when the program is run how much memory you need rather than hard coding in two with or within that constant.
为什么不写一个可以动态的方式写那个程序,程序可以动态分配内存,而不是用常量硬编码两个值。
And by that, I mean, not how much memory do I need to store the size of the input, it's really how much internal memory do I use up as I go through the computation?
需要占用多少内存,我意思并不是,存储输入需要多少内存,而是当我完成这个?
So both of these stories involve floating point values, but only in this case am I actually allocating memory.
所以这两个故事都涉及到浮点类型,但是只有那样我们才能真正地分配到内存。
When you call a function, what actually happens is that function gets its own chunk of memory that's identical in size to the data type that it expects.
当你调用一个函数,实际上发生的是,函数得到了自己的内存块,相同的类型,是占有一样大小的内存的。
But we know already from week zero that computers ultimately represent all information with numbers, and if they want to represent letters inside memory, well what do they do or what do they use?
但是自从上周我们已经知道,计算机最终是用数字来表示所有的,信息,如果它们要描绘,在内存中的字母,它们该怎么做,用什么方式呢?
And one of the ways you can make a program crash, intentionally or not, is to essentially use up too much memory or call too many functions and what happens is, bam, one hits the other and bad things happen.
其中一个方式能使你的程序崩溃掉,有意或无意的,它本质上使用了太多的内存,或者调用了太多的函数,所发生的,崩掉,一个冲突了另一个,然后发生了坏事情。
I have no idea what's here at the moment so I'm just going to draw a question mark because that memory might have been used previously for some other purpose, but we know it's currently available to us so we have four bytes of memory.
我不知道在此刻这里是什么,所以我画一个问号,因为那块内存可能在之前,为其它的目的而使用过,但是我们知道它可以为我们所使用,这样我们就有4个字节的内存。
Well, again, just as I said verbally a moment ago, if you're going here, you're literally touching, trying to read or change memory that's beyond the boundaries of a chunk of memory that you're supposed to be touching based on its length.
嗯,再次强调,就像我刚才说的,如果你从这里出发,你将依次接触到,试着读取或者改变内存,如果超出了你可以使用的,内存块长度的界限。
All right so it has to live in RAM as opposed to the hard drive because otherwise things would be terribly slow as you know so it's much better if your programs live while they're running in RAM and they end up in what's called the tech segment.
好的,它存在内存中,而不是硬盘中,因为,否则程序会非常的缓慢,程序在内存中运行会好得多,它们在技术段,的地方结束。
Well, because the memory we've been using for local variables, and for functions, storage space is what computer scientists generally call the stack.
好的,因为我们看到的内存是用于局部变量的,用于函数的,存储空间就是计算机科学家,通常说的堆。
Not by some very arcane numeric address inside my computer's memory, but by a symbol, by a name.
不是通过一些在我电脑内存中的神秘的数字地址,而是通过一个符号,一个名字。
foo You probably weren't calling foo ad nauseam here but segmentation fault refers to segments of memory colliding.
你可能不会倒胃口地调用,但是段错误是涉及内存段冲突。
Its name is malloc for memory allocation and what malloc does for us is we say, hmm, the user has typed in a three-letter word.
它为我们分配内存地址,它为用户输入的3个字母单词,分配地址。
That is the address in memory in the heap of the first byte that the user typed in.
那是用户输入的字符串第一个字节,内存中堆的地址。
You actually need to kind of do this and then you can swap these two numbers but it requires 50 percent more memory.
你实际上需要这样做,然后才能交换两个数字,但是它需要多50%的内存。
When you're working on a file, it's saving constantly to RAM but also hopefully to disc, the hard disk so you don't actually lose it if the power goes off.
当你打开一个文件,它不断地保存在内存中,但对于光盘,硬盘,当你断开电源的时候,数据不会丢失。
应用推荐