summaryrefslogtreecommitdiff
path: root/meap/meap-code/ch6/ch6-heap-vs-stack
diff options
context:
space:
mode:
authorAdam Carpenter <53hornet@gmail.com>2019-03-27 15:32:37 -0400
committerAdam Carpenter <53hornet@gmail.com>2019-03-27 15:32:37 -0400
commit67cdcc2e12118becb823e20a40cc2687f2b8425a (patch)
treeed92c3234b89079e6d4cf36f5e80c5ffa79def48 /meap/meap-code/ch6/ch6-heap-vs-stack
parente25482fca375d318a39c3b54db396b0db6e0b263 (diff)
downloadlearning-rust-67cdcc2e12118becb823e20a40cc2687f2b8425a.tar.xz
learning-rust-67cdcc2e12118becb823e20a40cc2687f2b8425a.zip
Started Rust in Action MEAP.
Diffstat (limited to 'meap/meap-code/ch6/ch6-heap-vs-stack')
-rw-r--r--meap/meap-code/ch6/ch6-heap-vs-stack/Cargo.lock46
-rw-r--r--meap/meap-code/ch6/ch6-heap-vs-stack/Cargo.toml7
-rw-r--r--meap/meap-code/ch6/ch6-heap-vs-stack/src/main.rs16
3 files changed, 69 insertions, 0 deletions
diff --git a/meap/meap-code/ch6/ch6-heap-vs-stack/Cargo.lock b/meap/meap-code/ch6/ch6-heap-vs-stack/Cargo.lock
new file mode 100644
index 0000000..d427b41
--- /dev/null
+++ b/meap/meap-code/ch6/ch6-heap-vs-stack/Cargo.lock
@@ -0,0 +1,46 @@
+[[package]]
+name = "bitflags"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "ch6-heap-via-box"
+version = "0.1.0"
+dependencies = [
+ "rand 0.3.20 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "fuchsia-zircon"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "bitflags 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "fuchsia-zircon-sys 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "fuchsia-zircon-sys"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "libc"
+version = "0.2.36"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "rand"
+version = "0.3.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "fuchsia-zircon 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)",
+ "libc 0.2.36 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[metadata]
+"checksum bitflags 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "b3c30d3802dfb7281680d6285f2ccdaa8c2d8fee41f93805dba5c4cf50dc23cf"
+"checksum fuchsia-zircon 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "2e9763c69ebaae630ba35f74888db465e49e259ba1bc0eda7d06f4a067615d82"
+"checksum fuchsia-zircon-sys 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "3dcaa9ae7725d12cdb85b3ad99a434db70b468c09ded17e012d86b5c1010f7a7"
+"checksum libc 0.2.36 (registry+https://github.com/rust-lang/crates.io-index)" = "1e5d97d6708edaa407429faa671b942dc0f2727222fb6b6539bf1db936e4b121"
+"checksum rand 0.3.20 (registry+https://github.com/rust-lang/crates.io-index)" = "512870020642bb8c221bf68baa1b2573da814f6ccfe5c9699b1c303047abe9b1"
diff --git a/meap/meap-code/ch6/ch6-heap-vs-stack/Cargo.toml b/meap/meap-code/ch6/ch6-heap-vs-stack/Cargo.toml
new file mode 100644
index 0000000..46d9dff
--- /dev/null
+++ b/meap/meap-code/ch6/ch6-heap-vs-stack/Cargo.toml
@@ -0,0 +1,7 @@
+[package]
+name = "ch6-heap-via-box"
+version = "0.1.0"
+authors = ["Tim McNamara <paperless@timmcnamara.co.nz>"]
+
+[dependencies]
+rand = "0.3" \ No newline at end of file
diff --git a/meap/meap-code/ch6/ch6-heap-vs-stack/src/main.rs b/meap/meap-code/ch6/ch6-heap-vs-stack/src/main.rs
new file mode 100644
index 0000000..3bf14c6
--- /dev/null
+++ b/meap/meap-code/ch6/ch6-heap-vs-stack/src/main.rs
@@ -0,0 +1,16 @@
+use std::mem::drop; // <1> Bring manual `drop()` into local scope
+
+fn main() {
+ let a = Box::new(1);
+ let b = Box::new(1);
+ let c = Box::new(1);
+
+ let result1 = *a + *b + *c; // <2> Use the variables so that they're not optimized away by the compiler. The unary `pass:[*]` operator is called the dereference operator. It returns the value within the box.
+
+ drop(a); // <3> The memory holding `a` is now available
+
+ let d = Box::new(1);
+ let result2 = *b + *c + *d;
+
+ println!("{} {}", result1, result2);
+}