Optimized C++. Proven Techniques for Heightened Performance
![Język publikacji: angielski Język publikacji: angielski](https://static01.helion.com.pl/global/flagi/1.png)
- Autor:
- Kurt Guntheroth
![Optimized C++. Proven Techniques for Heightened Performance Kurt Guntheroth - okładka ebooka](https://static01.helion.com.pl/global/okladki/326x466/e_04o8.png)
![Optimized C++. Proven Techniques for Heightened Performance Kurt Guntheroth - tył okładki ebooka](https://static01.helion.com.pl/global/okladki-tyl/326x466/e_04o8.png)
- 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...(71.82 zł najniższa cena z 30 dni)
71.82 zł
79.80 zł(-10%) -
Kiedy myślimy o takich aplikacjach jak Maya, VirtualBox, Telegram, Spotify, Dropbox czy Google Earth, być może nie od razu znajdujemy wspólny mianownik. A jest nim framework Qt, używany przez wszystkie te znane marki. Qt powstał z myślą o programowaniu interfejsów graficznych GUI, a ze względu na...
Framework Qt. Kurs video. Tworzenie interfejsów graficznych w C++ Framework Qt. Kurs video. Tworzenie interfejsów graficznych w C++
(67.05 zł najniższa cena z 30 dni)74.50 zł
149.00 zł(-50%) -
Dawno, dawno temu, w głębokich latach osiemdziesiątych ubiegłego wieku pewien duński informatyk zainspirowany językiem C opracował jeden z najważniejszych, najbardziej elastycznych i do dziś niezastąpionych języków programowania — C++. Dziś ten język jest wykorzystywany do tworzenia gier ko...
Opus magnum C++. Programowanie w języku C++. Wydanie III poprawione (komplet) Opus magnum C++. Programowanie w języku C++. Wydanie III poprawione (komplet)
(149.40 zł najniższa cena z 30 dni)174.30 zł
249.00 zł(-30%) -
C++ to jeden z najpopularniejszych i najpotężniejszych języków programowania. Stanowi punkt wyjścia dla wielu innych języków, które odziedziczyły po nim składnię i liczne możliwości, dzięki czemu można śmiało stwierdzić, że znajomość C++ otwiera drzwi do świata nowoczesnego programowania i jest p...
Opus magnum C++. Misja w nadprzestrzeń C++14/17. Tom 4. Wydanie II poprawione Opus magnum C++. Misja w nadprzestrzeń C++14/17. Tom 4. Wydanie II poprawione
(41.40 zł najniższa cena z 30 dni)48.30 zł
69.00 zł(-30%) -
This book is a fun introduction to the world of game programming, C++20, and the OpenGL-powered SFML using four fun, fully playable games of increasing difficulty and advancing features
Beginning C++ Game Programming. Learn C++ from scratch by building fun games - Third Edition Beginning C++ Game Programming. Learn C++ from scratch by building fun games - Third Edition
-
Modern CMake for C++ is your guide to building, testing, and packaging software with ease. You'll learn to create maintainable projects, compile and link executables and libraries, use external dependencies, and more.
Modern CMake for C++. Effortlessly build cutting-edge C++ code and deliver high-quality solutions - Second Edition Modern CMake for C++. Effortlessly build cutting-edge C++ code and deliver high-quality solutions - Second Edition
-
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
-
Keeping up with the Python ecosystem can be daunting. Its developer tooling doesn't provide the out-of-the-box experience native to languages like Rust and Go. When it comes to long-term project maintenance or collaborating with others, every Python project faces the same problem: how to build re...(203.15 zł najniższa cena z 30 dni)
207.44 zł
239.00 zł(-13%) -
Bringing a deep-learning project into production at scale is quite challenging. To successfully scale your project, a foundational understanding of full stack deep learning, including the knowledge that lies at the intersection of hardware, software, data, and algorithms, is required.This book il...(237.15 zł najniższa cena z 30 dni)
249.70 zł
289.00 zł(-14%) -
Frontend developers have to consider many things: browser compatibility, usability, performance, scalability, SEO, and other best practices. But the most fundamental aspect of creating websites is one that often falls short: accessibility. Accessibility is the cornerstone of any website, and if a...(194.65 zł najniższa cena z 30 dni)
207.10 zł
239.00 zł(-13%) -
In this insightful and comprehensive guide, Addy Osmani shares more than a decade of experience working on the Chrome team at Google, uncovering secrets to engineering effectiveness, efficiency, and team success. Engineers and engineering leaders looking to scale their effectiveness and drive tra...(118.15 zł najniższa cena z 30 dni)
121.09 zł
149.00 zł(-19%) -
Data modeling is the single most overlooked feature in Power BI Desktop, yet it's what sets Power BI apart from other tools on the market. This practical book serves as your fast-forward button for data modeling with Power BI, Analysis Services tabular, and SQL databases. It serves as a starting ...(194.65 zł najniższa cena z 30 dni)
206.39 zł
239.00 zł(-14%) -
C# is undeniably one of the most versatile programming languages available to engineers today. With this comprehensive guide, you'll learn just how powerful the combination of C# and .NET can be. Author Ian Griffiths guides you through C# 12.0 and .NET 8 fundamentals and techniques for building c...(228.65 zł najniższa cena z 30 dni)
249.34 zł
289.00 zł(-14%) -
Learn how to get started with Futures Thinking. With this practical guide, Phil Balagtas, founder of the Design Futures Initiative and the global Speculative Futures network, shows you how designers and futurists have made futures work at companies such as Atari, IBM, Apple, Disney, Autodesk, Luf...(152.15 zł najniższa cena z 30 dni)
155.10 zł
179.00 zł(-13%) -
Augmented Analytics isn't just another book on data and analytics; it's a holistic resource for reimagining the way your entire organization interacts with information to become insight-driven.Moving beyond traditional, limited ways of making sense of data, Augmented Analytics provides a dynamic,...(181.15 zł najniższa cena z 30 dni)
180.95 zł
219.00 zł(-17%) -
Learn how to prepare for—and pass—the Kubernetes and Cloud Native Associate (KCNA) certification exam. This practical guide serves as both a study guide and point of entry for practitioners looking to explore and adopt cloud native technologies. Adrián González Sánchez ...
Kubernetes and Cloud Native Associate (KCNA) Study Guide Kubernetes and Cloud Native Associate (KCNA) Study Guide
(169.14 zł najniższa cena z 30 dni)177.65 zł
209.00 zł(-15%) -
Python is an excellent way to get started in programming, and this clear, concise guide walks you through Python a step at a time—beginning with basic programming concepts before moving on to functions, data structures, and object-oriented design. This revised third edition reflects the gro...(148.56 zł najniższa cena z 30 dni)
148.06 zł
179.00 zł(-17%)
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
![Loader](https://static01.helion.com.pl/ebookpoint/img/ajax-loader.gif)
![ajax-loader](https://static01.helion.com.pl/ebookpoint/img/ajax-loader.gif)
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.