Optimized C++. Proven Techniques for Heightened Performance
- Autor:
- Kurt Guntheroth
- Ocena:
- Bądź pierwszym, który oceni tę książkę
- Stron:
- 388
- Dostępne formaty:
-
ePubMobi
Opis ebooka: Optimized C++. Proven Techniques for Heightened Performance
In today’s fast and competitive world, a program’s performance is just as important to customers as the features it provides. This practical guide teaches developers performance-tuning principles that enable optimization in C++. You’ll learn how to make code that already embodies best practices of C++ design run faster and consume fewer resources on any computer—whether it’s a watch, phone, workstation, supercomputer, or globe-spanning network of servers.
Author Kurt Guntheroth provides several running examples that demonstrate how to apply these principles incrementally to improve existing code so it meets customer requirements for responsiveness and throughput. The advice in this book will prove itself the first time you hear a colleague exclaim, “Wow, that was fast. Who fixed something?”
- Locate performance hot spots using the profiler and software timers
- Learn to perform repeatable experiments to measure performance of code changes
- Optimize use of dynamically allocated variables
- Improve performance of hot loops and functions
- Speed up string handling functions
- Recognize efficient algorithms and optimization patterns
- Learn the strengths—and weaknesses—of C++ container classes
- View searching and sorting through an optimizer’s eye
- Make efficient use of C++ streaming I/O functions
- Use C++ thread-based concurrency features effectively
Wybrane bestsellery
-
The C++ Workshop is designed to help you master the core concepts of C++. Each chapter features challenging exercises and hands-on projects to guide you effectively through writing and compiling clean code in a real-time environment.
The C++ Workshop. Learn to write clean, maintainable code in C++ and advance your career in software engineering The C++ Workshop. Learn to write clean, maintainable code in C++ and advance your career in software engineering
-
We współczesnym świecie, pełnym pośpiechu i rywalizacji, wydajność programu jest równie istotna dla klientów, jak oferowane przez niego funkcje. Ten praktyczny podręcznik wyjaśnia podstawowe zasady podnoszenia wydajności, które pomagają w optymalizacji kodu C++. Uczy, jak dostosowywać poprawny ko...(39.90 zł najniższa cena z 30 dni)
71.82 zł
79.80 zł(-10%) -
Jeśli zastanawiasz się nad karierą programisty lub już się przygotowujesz do tego, by zostać koderem, poważnie rozważ naukę języka C++. Zaprojektowany w latach 80. XX wieku przez duńskiego informatyka Bjarne Stroustrupa C++ rozszerza język C o obiektowe mechanizmy abstrakcji danych i silną statyc...
C++ w zadaniach. Kurs video. Techniki rozwiązywania złożonych zagadnień C++ w zadaniach. Kurs video. Techniki rozwiązywania złożonych zagadnień
(39.90 zł najniższa cena z 30 dni)83.85 zł
129.00 zł(-35%) -
Znajomość C++ otwiera więc drzwi do kreowania cyfrowego świata w różnych dziedzinach. Jednakże początki z C++ mogą stanowić wyzwanie i wywoływać pytania, jak się uczyć, aby robić postępy, i w jaki sposób uporządkować zdobytą wiedzę. Cóż, nie ma lepszej metody niż nauka poprzez praktykę! Przed Tob...(41.40 zł najniższa cena z 30 dni)
44.85 zł
69.00 zł(-35%) -
Szkolenie, które dziś proponujemy, pozwoli Ci się zaprzyjaźnić z językiem programowania C++ – najpierw przyjrzeć mu się z pozycji kompletnego laika, potem poznać nieco bliżej i wreszcie naprawdę zaprzyjaźnić. Autor kursu bowiem twierdzi, że choć większość osób jako pierwszy język programowa...
Podstawy C++. Kurs video. Praktyczne podejście do rozwiązywania zadań Podstawy C++. Kurs video. Praktyczne podejście do rozwiązywania zadań
(39.90 zł najniższa cena z 30 dni)70.95 zł
129.00 zł(-45%) -
Autor tego zbioru zadań jest programistą i nauczycielem. To prawdziwy pasjonat programowania ― w tym w języku C++ ― które traktuje jak przedłużenie ludzkiej mowy. Uważa, że praktycznie na wszystko, co robimy w życiu, można spojrzeć jak na wykonywanie funkcji i algorytmów, które opisuj...(22.20 zł najniższa cena z 30 dni)
24.05 zł
37.00 zł(-35%) -
Jeśli zależy Ci na tym, aby zdobyć rzetelną wiedzę i perfekcyjne umiejętności programowania z użyciem języka C++, powinieneś uczyć się od wybitnego eksperta i twórcy tego języka — Bjarne Stroustrupa, który jako pierwszy zaprojektował i zaimplementował C++. Podręcznik, który trzymasz w ręku,...
Programowanie. Teoria i praktyka z wykorzystaniem C++. Wydanie III Programowanie. Teoria i praktyka z wykorzystaniem C++. Wydanie III
(39.90 zł najniższa cena z 30 dni)74.50 zł
149.00 zł(-50%) -
Nie pamiętasz jakiegoś algorytmu? Nie wiesz, jaką strukturę danych należy zastosować? Nie masz pojęcia, jak wyznaczyć złożoność obliczeniową algorytmu? Nie martw się, Twoje problemy należą już do przeszłości! Tablice informatyczne. Algorytmy pozwolą Ci szybko odnaleźć i przypomnieć sobie podstawo...(6.90 zł najniższa cena z 30 dni)
8.49 zł
17.00 zł(-50%) -
Tablice informatyczne. C++" zawierają zestawienie najpotrzebniejszych informacji dotyczących języka C++. Każdy programista doceni je, gdy podczas pracy nie będzie miał czasu na wertowanie kilkunastu książek.(6.45 zł najniższa cena z 30 dni)
6.45 zł
12.90 zł(-50%) -
Unlock your architectural visualization potential with this comprehensive guide to UE5. Learn best practices, advanced techniques, and hands-on exercises for photorealistic real-time 3D environments. Ideal for beginners to experienced professionals.
Architectural Visualization in Unreal Engine 5. Create photorealistic architectural interior renderings in UE5 Architectural Visualization in Unreal Engine 5. Create photorealistic architectural interior renderings in UE5
O autorze ebooka
Ebooka "Optimized C++. Proven Techniques for Heightened Performance" przeczytasz na:
-
czytnikach Inkbook, Kindle, Pocketbook, Onyx Boox i innych
-
systemach Windows, MacOS i innych
-
systemach Windows, Android, iOS, HarmonyOS
-
na dowolnych urządzeniach i aplikacjach obsługujących formaty: PDF, EPub, Mobi
Masz pytania? Zajrzyj do zakładki Pomoc »
Audiobooka "Optimized C++. Proven Techniques for Heightened Performance" posłuchasz:
-
w aplikacji Ebookpoint na Android, iOS, HarmonyOs
-
na systemach Windows, MacOS i innych
-
na dowolnych urządzeniach i aplikacjach obsługujących format MP3 (pliki spakowane w ZIP)
Masz pytania? Zajrzyj do zakładki Pomoc »
Kurs Video "Optimized C++. Proven Techniques for Heightened Performance" zobaczysz:
-
w aplikacjach Ebookpoint i Videopoint na Android, iOS, HarmonyOs
-
na systemach Windows, MacOS i innych z dostępem do najnowszej wersji Twojej przeglądarki internetowej
Szczegóły ebooka
- ISBN Ebooka:
- 978-14-919-2201-9, 9781491922019
- Data wydania ebooka:
- 2016-04-27 Data wydania ebooka często jest dniem wprowadzenia tytułu do sprzedaży i może nie być równoznaczna z datą wydania książki papierowej. Dodatkowe informacje możesz znaleźć w darmowym fragmencie. Jeśli masz wątpliwości skontaktuj się z nami sklep@ebookpoint.pl.
- Język publikacji:
- angielski
- Rozmiar pliku ePub:
- 4.3MB
- Rozmiar pliku Mobi:
- 9.8MB
Spis treści ebooka
- Preface
- Apology for the Code in This Book
- Using Code Examples
- Conventions Used in This Book
- 1. An Overview of Optimization
- Optimization Is Part of Software Development
- Optimization Is Effective
- Its OK to Optimize
- A Nanosecond Here, a Nanosecond There
- Summary of Strategies for Optimizing C++ Code
- Use a Better Compiler, Use Your Compiler Better
- Use Better Algorithms
- Use Better Libraries
- Reduce Memory Allocation and Copying
- Remove Computation
- Use Better Data Structures
- Increase Concurrency
- Optimize Memory Management
- Summary
- 2. Computer Behavior Affecting Optimization
- Lies C++ Believes About Computers
- The Truth About Computers
- Memory Is Slow
- Memory Is Not Accessed in Bytes
- Some Memory Accesses Are Slower than Others
- Memory Words Have a Big End and a Little End
- Memory Has Finite Capacity
- Instruction Execution Is Slow
- Making Decisions Is Hard for Computers
- There Are Multiple Streams of Program Execution
- Calling into the Operating System Is Expensive
- C++ Tells Lies Too
- All Statements Are Not Equally Expensive
- Statements Are Not Executed in Order
- Summary
- 3. Measure Performance
- The Optimizing Mindset
- Performance Must Be Measured
- Optimizers Are Big Game Hunters
- The 90/10 Rule
- Amdahls Law
- The Optimizing Mindset
- Perform Experiments
- Keep a Lab Notebook
- Measure Baseline Performance and Set Goals
- You Can Improve Only What You Measure
- Profile Program Execution
- Time Long-Running Code
- A Little Learning About Measuring Time
- Precision, trueness, and accuracy
- Measuring time
- Measurement resolution
- Measuring with several clocks
- A Little Learning About Measuring Time
- Measuring Time with Computers
- Hardware evolution of tick counters
- Wraparound
- Resolution is not accuracy
- Latency
- Nondeterministic behavior
- Overcoming Measurement Obstacles
- Dont sweat the small stuff
- Measure relative performance
- Improve repeatability by measuring module tests
- Tune performance with metrics
- Improve accuracy by averaging many iterations
- Reduce nondeterministic operating system behavior by raising priority
- Nondeterminism happensget over it
- Create a Stopwatch Class
- Time Hot Functions in a Test Harness
- Estimate Code Cost to Find Hot Code
- Estimate the Cost of Individual C++ Statements
- Estimate the Cost of Loops
- Estimate repeat count in nested loops
- Estimate loops with variable repeat count
- Recognize implicit loops
- Recognize false loops
- Other Ways to Find Hot Spots
- Summary
- 4. Optimize String Use: A Case Study
- Why Strings Are a Problem
- Strings Are Dynamically Allocated
- Strings Are Values
- Strings Do a Lot of Copying
- Why Strings Are a Problem
- First Attempt at Optimizing Strings
- Use Mutating String Operations to Eliminate Temporaries
- Reduce Reallocation by Reserving Storage
- Eliminate Copying of String Arguments
- Eliminate Pointer Dereference Using Iterators
- Eliminate Copying of Returned String Values
- Use Character Arrays Instead of Strings
- Summary of First Optimization Attempt
- Second Attempt at Optimizing Strings
- Use a Better Algorithm
- Use a Better Compiler
- Use a Better String Library
- Adopt a richer library for std::string
- Use std::stringstream to avoid value semantics
- Adopt a novel string implementation
- Use a Better Allocator
- Eliminate String Conversion
- Conversion from C String to std::string
- Converting Between Character Encodings
- Summary
- 5. Optimize Algorithms
- Time Cost of Algorithms
- Best-Case, Average, and Worst-Case Time Cost
- Amortized Time Cost
- Other Costs
- Time Cost of Algorithms
- Toolkit to Optimize Searching and Sorting
- Efficient Search Algorithms
- Time Cost of Searching Algorithms
- All Searches Are Equal When n Is Small
- Efficient Sort Algorithms
- Time Cost of Sorting Algorithms
- Replace Sorts Having Poor Worst-Case Performance
- Exploit Known Properties of the Input Data
- Optimization Patterns
- Precomputation
- Lazy Computation
- Batching
- Caching
- Specialization
- Taking Bigger Bites
- Hinting
- Optimizing the Expected Path
- Hashing
- Double-Checking
- Summary
- 6. Optimize Dynamically Allocated Variables
- C++ Variables Refresher
- Storage Duration of Variables
- Ownership of Variables
- Value Objects and Entity Objects
- C++ Variables Refresher
- C++ Dynamic Variable API Refresher
- Smart Pointers Automate Ownership of Dynamic Variables
- Automating ownership of dynamic variables
- Shared ownership of dynamic variables is more expensive
- std::auto_ptr versus container classes
- Smart Pointers Automate Ownership of Dynamic Variables
- Dynamic Variables Have Runtime Cost
- Reduce Use of Dynamic Variables
- Create Class Instances Statically
- Create class member variables statically
- Create Class Instances Statically
- Use Static Data Structures
- Use std::array instead of std::vector
- Create large buffers on the stack
- Create linked data structures statically
- Create binary trees in an array
- Use a circular buffer instead of a deque
- Use std::make_shared Instead of new
- Dont Share Ownership Unnecessarily
- Use a Master Pointer to Own Dynamic Variables
- Reduce Reallocation of Dynamic Variables
- Preallocate Dynamic Variables to Prevent Reallocation
- Create Dynamic Variables Outside of Loops
- Eliminate Unneeded Copying
- Disable Unwanted Copying in the Class Definition
- Eliminate Copying on Function Call
- Eliminate Copying on Function Return
- Copy Free Libraries
- Implement the Copy on Write Idiom
- Slice Data Structures
- Implement Move Semantics
- Nonstandard Copy Semantics: A Painful Hack
- std::swap(): The Poor Mans Move Semantics
- Shared Ownership of Entities
- The Moving Parts of Move Semantics
- Update Code to Use Move Semantics
- Subtleties of Move Semantics
- Moving instances into std::vector
- Rvalue reference arguments are lvalues
- Dont return an rvalue reference
- Moving bases and members
- Flatten Data Structures
- Summary
- 7. Optimize Hot Statements
- Remove Code from Loops
- Cache the Loop End Value
- Use More Efficient Loop Statements
- Count Down Instead of Up
- Remove Invariant Code from Loops
- Remove Unneeded Function Calls from Loops
- Remove Hidden Function Calls from Loops
- Remove Expensive, Slow-Changing Calls from Loops
- Push Loops Down into Functions to Reduce Call Overhead
- Do Some Actions Less Frequently
- What About Everything Else?
- Remove Code from Loops
- Remove Code from Functions
- Cost of Function Calls
- Basic cost of function calls
- Cost of virtual functions
- Member function calls in derived classes
- Cost of pointers to functions
- Summary of function call costs
- Cost of Function Calls
- Declare Brief Functions Inline
- Define Functions Before First Use
- Eliminate Unused Polymorphism
- Discard Unused Interfaces
- Select interface implementation at link time
- Select interface implementation at compile time
- Select Implementation at Compile Time with Templates
- Eliminate Uses of the PIMPL Idiom
- Eliminate Calls into DLLs
- Use Static Member Functions Instead of Member Functions
- Move Virtual Destructor to Base Class
- Optimize Expressions
- Simplify Expressions
- Group Constants Together
- Use Less-Expensive Operators
- Use Integer Arithmetic Instead of Floating Arithmetic
- Double May Be Faster than Float
- Replace Iterative Computations with Closed Forms
- Optimize Control Flow Idioms
- Use switch Instead of if-elseif-else
- Use Virtual Functions Instead of switch or if
- Use No-Cost Exception Handling
- Dont use exception specifications
- Summary
- 8. Use Better Libraries
- Optimize Standard Library Use
- Philosophy of the C++ Standard Library
- Issues in Use of the C++ Standard Library
- Optimize Standard Library Use
- Optimize Existing Libraries
- Change as Little as Possible
- Add Functions Rather than Change Functionality
- Design Optimized Libraries
- Code in Haste, Repent at Leisure
- Parsimony Is a Virtue in Library Design
- Make Memory Allocation Decisions Outside the Library
- When in Doubt, Code Libraries for Speed
- Functions Are Easier to Optimize than Frameworks
- Flatten Inheritance Hierarchies
- Flatten Calling Chains
- Flatten Layered Designs
- Avoid Dynamic Lookup
- Beware of God Functions
- Summary
- 9. Optimize Searching and Sorting
- Key/Value Tables Using std::map and std::string
- Toolkit to Improve Search Performance
- Make a Baseline Measurement
- Identify the Activity to Be Optimized
- Decompose the Activity to Be Optimized
- Change or Replace Algorithms and Data Structures
- Using the Optimization Process on Custom Abstractions
- Optimize Search Using std::map
- Use Fixed-Size Character Array Keys with std::map
- Use C-Style String Keys with std::map
- Using Maps Cousin std::set When the Key Is in the Value
- Optimize Search Using the <algorithm> Header
- Key/Value Table for Search in Sequence Containers
- std::find(): Obvious Name, O(n) Time Cost
- std::binary_search(): Does Not Return Values
- Binary Search Using std::equal_range()
- Binary Search Using std::lower_bound()
- Handcoded Binary Search
- Handcoded Binary Search using strcmp()
- Optimize Search in Hashed Key/Value Tables
- Hashing with a std::unordered_map
- Hashing with Fixed Character Array Keys
- Hashing with Null-Terminated String Keys
- Hashing with a Custom Hash Table
- Stepanovs Abstraction Penalty
- Optimize Sorting with the C++ Standard Library
- Summary
- 10. Optimize Data Structures
- Get to Know the Standard Library Containers
- Sequence Containers
- Associative Containers
- Experimenting with the Standard Library Containers
- Element data type
- A note on designing the experiment
- Get to Know the Standard Library Containers
- std::vector and std::string
- Performance Consequences of Reallocation
- Inserting and Deleting in std::vector
- Iterating in std::vector
- Sorting std::vector
- Lookup with std::vector
- std::deque
- Inserting and Deleting in std::deque
- Iterating in std::deque
- Sorting std::deque
- Lookup with std::deque
- std::list
- Inserting and Deleting in std::list
- Iterating in std::list
- Sorting std::list
- Lookup with std::list
- std::forward_list
- Inserting and Deleting in std::forward_list
- Iterating in std::forward_list
- Sorting std::forward_list
- Lookup in std::forward_list
- std::map and std::multimap
- Inserting and Deleting in std::map
- Optimizing the check-and-update idiom
- Inserting and Deleting in std::map
- Iterating in std::map
- Sorting std::map
- Lookup with std::map
- std::set and std::multiset
- std::unordered_map and std::unordered_multimap
- Inserting and Deleting in std::unordered_map
- Iterating in std::unordered_map
- Lookup with std::unordered_map
- Other Data Structures
- Summary
- 11. Optimize I/O
- A Recipe for Reading Files
- Create a Parsimonious Function Signature
- Shorten Calling Chains
- Reduce Reallocation
- Take Bigger BitesUse a Bigger Input Buffer
- Take Bigger BitesRead a Line at a Time
- Shorten Calling Chains Again
- Things That Didnt Help
- A Recipe for Reading Files
- Writing Files
- Reading from std::cin and Writing to std::cout
- Summary
- 12. Optimize Concurrency
- Concurrency Refresher
- A Walk Through the Concurrency Zoo
- Interleaved Execution
- Sequential Consistency
- Races
- Synchronization
- Atomicity
- Atomicity by mutual exclusion
- Atomic hardware operations
- Concurrency Refresher
- C++ Concurrency Facilities Refresher
- Threads
- Promises and Futures
- Asynchronous Tasks
- Mutexes
- Locks
- Condition Variables
- Atomic Operations on Shared Variables
- Memory fences
- On Deck: Future C++ Concurrency Features
- Optimize Threaded C++ Programs
- Prefer std::async to std::thread
- Create as Many Runnable Threads as Cores
- Implement a Task Queue and Thread Pool
- Perform I/O in a Separate Thread
- Program Without Synchronization
- Remove Code from Startup and Shutdown
- Make Synchronization More Efficient
- Reduce the Scope of Critical Sections
- Limit the Number of Concurrent Threads
- Avoid the Thundering Herd
- Avoid Lock Convoys
- Reduce Contention
- Dont Busy-Wait on a Single-Core System
- Dont Wait Forever
- Rolling Your Own Mutex May Be Ineffective
- Limit Producer Output Queue Length
- Concurrency Libraries
- Summary
- 13. Optimize Memory Management
- C++ Memory Management API Refresher
- The Life Cycle of Dynamic Variables
- Memory Management Functions Allocate and Free Memory
- operator new() implements allocation
- operator delete() frees allocated memory
- Memory management functions from the C library
- New-Expressions Construct Dynamic Variables
- Non-throwing new
- Placement new performs placement without allocation
- Custom placement new, the half-formed hinterland of allocation
- Class-specific operator new() gives fine control of allocation
- C++ Memory Management API Refresher
- Delete-Expressions Dispose of Dynamic Variables
- Explicit Destructor Calls Destroy Dynamic Variables
- There is no explicit constructor call... Or is there?
- High-Performance Memory Managers
- Provide Class-Specific Memory Managers
- Fixed-Size-Block Memory Manager
- Block Arena
- Adding a Class-Specific operator new()
- Performance of the Fixed-Block Memory Manager
- Variations on the Fixed-Block Memory Manager
- Non-Thread Safe Memory Managers Are Efficient
- Provide Custom Standard Library Allocators
- Minimal C++11 Allocator
- Additional Definitions for C++98 Allocator
- A Fixed-Block Allocator
- Performance of the fixed-block allocator
- A Fixed-Block Allocator for Strings
- Performance of the string allocator
- Summary
- Index
O'Reilly Media - inne książki
-
Software as a service (SaaS) is on the path to becoming the de facto model for building, delivering, and operating software solutions. Adopting a multi-tenant SaaS model requires builders to take on a broad range of new architecture, implementation, and operational challenges. How data is partiti...(237.15 zł najniższa cena z 30 dni)
245.65 zł
289.00 zł(-15%) -
Great engineers don't necessarily make great leaders—at least, not without a lot of work. Finding your path to becoming a strong leader is often fraught with challenges. It's not easy to figure out how to be strategic, successful, and considerate while also being firm. Whether you're on the...(118.15 zł najniższa cena z 30 dni)
126.65 zł
149.00 zł(-15%) -
Data science happens in code. The ability to write reproducible, robust, scaleable code is key to a data science project's success—and is absolutely essential for those working with production code. This practical book bridges the gap between data science and software engineering,and clearl...(211.65 zł najniższa cena z 30 dni)
220.15 zł
259.00 zł(-15%) -
With the massive adoption of microservices, operators and developers face far more complexity in their applications today. Service meshes can help you manage this problem by providing a unified control plane to secure, manage, and monitor your entire network. This practical guide shows you how th...(194.65 zł najniższa cena z 30 dni)
211.65 zł
249.00 zł(-15%) -
Get practical advice on how to leverage AI development tools for all stages of code creation, including requirements, planning, design, coding, debugging, testing, and documentation. With this book, beginners and experienced developers alike will learn how to use a wide range of tools, from gener...(177.65 zł najniższa cena z 30 dni)
164.25 zł
219.00 zł(-25%) -
Rust's popularity is growing, due in part to features like memory safety, type safety, and thread safety. But these same elements can also make learning Rust a challenge, even for experienced programmers. This practical guide helps you make the transition to writing idiomatic Rust—while als...(177.65 zł najniższa cena z 30 dni)
164.25 zł
219.00 zł(-25%) -
Advance your Power BI skills by adding AI to your repertoire at a practice level. With this practical book, business-oriented software engineers and developers will learn the terminologies, practices, and strategy necessary to successfully incorporate AI into your business intelligence estate. Je...(211.65 zł najniższa cena z 30 dni)
220.15 zł
259.00 zł(-15%) -
Microservices can be a very effective approach for delivering value to your organization and to your customers. If you get them right, microservices help you to move fast by making changes to small parts of your system hundreds of times a day. But if you get them wrong, microservices will just ma...(203.15 zł najniższa cena z 30 dni)
211.65 zł
249.00 zł(-15%) -
JavaScript gives web developers great power to create rich interactive browser experiences, and much of that power is provided by the browser itself. Modern web APIs enable web-based applications to come to life like never before, supporting actions that once required browser plug-ins. Some are s...(186.15 zł najniższa cena z 30 dni)
186.15 zł
219.00 zł(-15%) -
How will software development and operations have to change to meet the sustainability and green needs of the planet? And what does that imply for development organizations? In this eye-opening book, sustainable software advocates Anne Currie, Sarah Hsu, and Sara Bergman provide a unique overview...(160.65 zł najniższa cena z 30 dni)
169.14 zł
199.00 zł(-15%)
Dzieki opcji "Druk na żądanie" do sprzedaży wracają tytuły Grupy Helion, które cieszyły sie dużym zainteresowaniem, a których nakład został wyprzedany.
Dla naszych Czytelników wydrukowaliśmy dodatkową pulę egzemplarzy w technice druku cyfrowego.
Co powinieneś wiedzieć o usłudze "Druk na żądanie":
- usługa obejmuje tylko widoczną poniżej listę tytułów, którą na bieżąco aktualizujemy;
- cena książki może być wyższa od początkowej ceny detalicznej, co jest spowodowane kosztami druku cyfrowego (wyższymi niż koszty tradycyjnego druku offsetowego). Obowiązująca cena jest zawsze podawana na stronie WWW książki;
- zawartość książki wraz z dodatkami (płyta CD, DVD) odpowiada jej pierwotnemu wydaniu i jest w pełni komplementarna;
- usługa nie obejmuje książek w kolorze.
Masz pytanie o konkretny tytuł? Napisz do nas: sklep[at]helion.pl.
Książka, którą chcesz zamówić pochodzi z końcówki nakładu. Oznacza to, że mogą się pojawić drobne defekty (otarcia, rysy, zagięcia).
Co powinieneś wiedzieć o usłudze "Końcówka nakładu":
- usługa obejmuje tylko książki oznaczone tagiem "Końcówka nakładu";
- wady o których mowa powyżej nie podlegają reklamacji;
Masz pytanie o konkretny tytuł? Napisz do nas: sklep[at]helion.pl.
Książka drukowana
Oceny i opinie klientów: Optimized C++. Proven Techniques for Heightened Performance Kurt Guntheroth (0) Weryfikacja opinii następuję na podstawie historii zamówień na koncie Użytkownika umieszczającego opinię. Użytkownik mógł otrzymać punkty za opublikowanie opinii uprawniające do uzyskania rabatu w ramach Programu Punktowego.