How we did it:
For any feedback, any questions, any notes or just for chat - feel free to follow us on social networks
In designing large-scale C++ applications, you are entering a dimension barely skimmed by most C++ books, particularly considering experience with small programming projects does not scale up to larger projects. This book unites high-level design concepts with specific C++ programming details to reveal practical methods for planning and implementing high-quality large C++ systems. You will learn the importance of physical design in large systems, how to structure your software as an acyclic hierarchy of components, and techniques for reducing link-time and compile-time dependencies. Then the book turns to logical design issues--architecting a component, designing a function, and implementing an object--all in the context of a large-project environment.
David Vandevoorde, Nicolai M. Josuttis
With the greatly increased use of templates, there is a real need in the C++ community for this information. This book is the next C++ classic, acting as both a complete reference as well as a tutorial. It emphasizes the practical use of templates, and includes real-world examples.
Henry S. Warren
" "This is the first book that promises to tell the deep, dark secrets of computer arithmetic, and it delivers in spades. It contains every trick I knew plus many, many more. A godsend for library developers, compiler writers, and lovers of elegant hacks, it deserves a spot on your shelf right next to Knuth.""--Josh Bloch" "When I first saw the title, I figured that the book must be either a cookbook for breaking into computers (unlikely) or some sort of compendium of little programming tricks. It's the latter, but it's thorough, almost encyclopedic, in its coverage." "--Guy Steele These are the timesaving techniques relished by computer hackers--those devoted and persistent code developers who seek elegant and efficient ways to build better software. The truth is that much of the computer programmer's job involves a healthy mix of arithmetic and logic. In "Hacker's Delight," veteran programmer Hank Warren shares the tricks he has collected from his considerable experience in the worlds of application and system programming. Most of these techniques are eminently practical, but a few are included just because they are interesting and unexpected. The resulting work is an irresistible collection that will help even the most seasoned programmers better their craft. Topics covered include: A broad collection of useful programming tricks Small algorithms for common tasksPower-of-2 boundaries and bounds checkingRearranging bits and bytesInteger division and division by constantsSome elementary functions on integersGray codeHilbert's space-filling curveAnd even formulas for prime numbers! This book is for anyone who wants to create efficient code. "Hacker's Delight" will help you learn to program at a higher level--well beyond what is generally taught in schools and training courses--and will advance you substantially further than is possible through ordinary self-study alone. 0201914654B06272002
With the new C++ Standard and Technical Report 2 (TR2), multi-threading is coming to C++ in a big way. TR2 will provide higher-level synchronization facilities that allow for a much greater level of abstraction, and make programming multi-threaded applications simpler and safer. Concurrent programming is required if programmers are to take advantage of the multi-core microprocessors increasingly available from Intel and others. The new standard for C++ has extensions to the language that make concurrent programming more accessible to regular developers. As a guide and reference to the new concurrency features in the upcoming C++ Standard and TR2, this book is invaluable for existing programmers familiar with writing multi-threaded code in C++ using platform-specific APIs, or in other languages, as well as C++ programmers who have never written multithreaded code before.
David R. Hanson
C Interfaces and Implementations describes how to use interface-based design in the C programming language, and it illustrates this approach by describing 24 interfaces and their implementations in detail. The source code in the book is interleaved with its explanation in an order that best suits understanding the code.
John R. Levine
Whatever your programming language, whatever your platform, you probably tap into linker and loader functions all the time. But do you know how to use them to their greatest possible advantage? Only now, with the publication of Linkers & Loaders, is there an authoritative book devoted entirely to these deep-seated compile-time and run-time processes. The book begins with a detailed and comparative account of linking and loading that illustrates the differences among various compilers and operating systems. On top of this foundation, the author presents clear practical advice to help you create faster, cleaner code. You'll learn to avoid the pitfalls associated with Windows DLLs, take advantage of the space-saving, performance-improving techniques supported by many modern linkers, make the best use of the UNIX ELF library scheme, and much more. If you're serious about programming, you'll devour this unique guide to one of the field's least understood topics. Linkers & Loaders is also an ideal supplementary text for compiler and operating systems courses. *Includes a linker construction project written in Perl, with project files available for download. *Covers dynamic linking in Windows, UNIX, Linux, BeOS, and other operating systems. *Explains the Java linking model and how it figures in network applets and extensible Java code. *Helps you write more elegant and effective code, and build applications that compile, load, and run more efficiently.
The eagerly anticipated new edition of the bestselling introduction to x86 assembly language The long-awaited third edition of this bestselling introduction to assembly language has been completely rewritten to focus on 32-bit protected-mode Linux and the free NASM assembler. Assembly is the fundamental language bridging human ideas and the pure silicon hearts of computers, and popular author Jeff Dunteman retains his distinctive lighthearted style as he presents a step-by-step approach to this difficult technical discipline. He starts at the very beginning, explaining the basic ideas of programmable computing, the binary and hexadecimal number systems, the Intel x86 computer architecture, and the process of software development under Linux. From that foundation he systematically treats the x86 instruction set, memory addressing, procedures, macros, and interface to the C-language code libraries upon which Linux itself is built. Serves as an ideal introduction to x86 computing concepts, as demonstrated by the only language directly understood by the CPU itselfUses an approachable, conversational style that assumes no prior experience in programming of any kindPresents x86 architecture and assembly concepts through a cumulative tutorial approach that is ideal for self-paced instructionFocuses entirely on free, open-source software, including Ubuntu Linux, the NASM assembler, the Kate editor, and the Gdb/Insight debuggerIncludes an x86 instruction set reference for the most common machine instructions, specifically tailored for use by programming beginnersWoven into the presentation are plenty of assembly code examples, plus practical tips on software design, coding, testing, and debugging, all using free, open-source software that may be downloaded without charge from the Internet.
Randal E. Bryant, David R. O'Hallaron
For Computer Systems, Computer Organization and Architecture courses in CS, EE, and ECE departments. Few students studying computer science or computer engineering will ever have the opportunity to build a computer system. On the other hand, most students will be required to use and program computers on a near daily basis. Computer Systems: A Programmer’s Perspective introduces the important and enduring concepts that underlie computer systems by showing how these ideas affect the correctness, performance, and utility of application programs. The text's hands-on approach (including a comprehensive set of labs) helps students understand the “under-the-hood” operation of a modern computer system and prepares them for future courses in systems topics such as compilers, computer architecture, operating systems, and networking. Visit the CSS:AP web page http://csapp.cs.cmu.edu for more information and resources.
The bestselling guide to assembly language-now updated and expanded to include coverage of Linux This new edition of the bestselling guide to assembly programming now covers DOS and Linux! The Second Edition begins with a highly accessible overview of the internal operations of the Intel-based PC and systematically covers all the steps involved in writing, testing, and debugging assembly programs. Expert author Jeff Duntemann then presents working example programs for both the DOS and Linux operating systems using the popular free assembler NASM. He also includes valuable information on how to use procedures and macros, plus rare explanations of assembly-level coding for Linux, all of which combine to offer a comprehensive look at the complexities of assembly programming for Intel processors. Providing you with the foundation to create executable assembly language programs, this book: * Explains how to use NASM-IDE, a simple program editor and assembly-oriented development environment * Details the most used elements of the 86-family instruction set * Teaches about DEBUG, the single most useful tool you have as an assembly language programmer * Examines the operations that machine instructions force the CPU to perform * Discusses the process of memory addressing * Covers coding for Linux The CD-ROM includes: * Net-Wide Assembler (NASM) for both DOS and Linux * NASM-IDE, a command shell and code editor for DOS * ALINK, a free linker for DOS programming * All program code examples from the book
Maurice Herlihy, Nir Shavit
Revised and updated with improvements conceived in parallel programming courses, The Art of Multiprocessor Programming is an authoritative guide to multicore programming. It introduces a higher level set of software development skills than that needed for efficient single-core programming. This book provides comprehensive coverage of the new principles, algorithms, and tools necessary for effective multiprocessor programming. Students and professionals alike will benefit from thorough coverage of key multiprocessor programming issues. This revised edition incorporates much-demanded updates throughout the book, based on feedback and corrections reported from classrooms since 2008 Learn the fundamentals of programming multiple threads accessing shared memory Explore mainstream concurrent data structures and the key elements of their design, as well as synchronization techniques from simple locks to transactional memory systems Visit the companion site and download source code, example Java programs, and materials to support and enhance the learning experience
Professional Assembly Language Every high level language program (such as C and C++) is converted by a compiler into assembly language before it is linked into an executable program. This book shows you how to view the assembly language code generated by the compiler and understand how it is created. With that knowledge you can tweak the assembly language code generated by the compiler or create your own assembly language routines. This code-intensive guide is divided into three sections — basics of the assembly language program development environment, assembly language programming, and advanced assembly language techniques. It shows how to decipher the compiler-generated assembly language code, and how to make functions in your programs faster and more efficient to increase the performance of an application. What you will learn from this book: The benefits of examining the assembly language code generated from your high-level language program How to create stand-alone assembly language programs for the Linux Pentium environment Ways to incorporate advanced functions and libraries in assembly language programs How to incorporate assembly language routines in your C and C++ applications Ways to use Linux system calls in your assembly language programs How to utilize Pentium MMX and SSE functions in your applications
This essential resource for software developers highlights the weak points in "well-protected" software, shows how crackers break common protection schemes, and how to defend against crackers. Includes in-depth discussions of anti-debugging and anti-disassembling. The CD-ROM contains compression and encoding software, debuggers and anti-debugging tricks, practical protection demonstrations, and extended examples from the book.
Mark Mitchell, Jeffrey Oldham, Alex Samuel
Advanced Linux Programming is divided into two parts. The first covers generic UNIX system services, but with a particular eye towards Linux specific information. This portion of the book will be of use even to advanced programmers who have worked with other Linux systems since it will cover Linux specific details and differences. For programmers without UNIX experience, it will be even more valuable. The second section covers material that is entirely Linux specific. These are truly advanced topics, and are the techniques that the gurus use to build great applications. While this book will focus mostly on the Application Programming Interface (API) provided by the Linux kernel and the C library, a preliminary introduction to the development tools available will allow all who purchase the book to make immediate use of Linux.
Authored by a member of the Linux kernel development team -In-depth coverage of all the major subsystems and features of the new Linux 2.6 kernel -Targeted audience includes programmers interested in gaining relevant and timely information so they may further their kernel development skills
The author of the "Programmer's Toolbox" column shows how to use powerful math functions to achieve optimal real-time performance in programming. Along the way, readers will gain new understanding of math fundamentals, learn how to write more robust software for real-time systems, and discover how to implement math algorithms efficiently and accurately. The toolkit is bundled with a CD-ROM containing an arsenal of math algorithms to make the learning process easy and fun.
William von Hagen
* Expanded and revised in light of the GNU Compiler Collection (GCC) 4 release in April 2005, this book offers detailed coverage of GCC's somewhat daunting array of options and features and includes several chapters devoted to its support for languages like C, C++, Java, Objective-C, and Fortran. * Though targeting beginner and intermediate developers, this book goes well beyond basic compiler usage, combining instruction of GCC's advanced features and utilities (authconf, libtool, and gprof) with key coding techniques, such as profiling and optimization to show how to build and manage enterprise-level applications. * This is an enormous market. GCC is the defacto compiler collection for hundreds of thousands of open source projects worldwide, a wide variety of commercial development projects, and is the standard compiler for academic programs.
C for Engineers and Scientists is a complete and authoritative introduction to computer programming in C, with introductions to object-oriented programming in C++, and graphical plotting and numerical computing in C/C++ interpreter Ch® and MATLAB® for applications in engineering and science. This book is designed to teach students how to solve engineering and science problems using C. It teaches beginners with no previous programming experience the underlying working principles of scientific computing and a disciplined approach for software development. All the major features of C89 and C99 are presented with numerous engineering application examples derived from production code. The book reveals the coding techniques used by the best C programmers and shows how experts solve problems in C. It is also an invaluable resource and reference book for seasoned programmers. C for Engineers and Scientists focuses on systematic software design approach in C for applications in engineering and science following the C99, the latest standard developed by the ANSI and ISO C Standard Committees which resolved many deficiencies of C89 for applications in engineering and science. The book includes a companion CD which contains the C/C++ interpreter Ch for use as an instructional tool as well as Visual C++ and gcc/g++ compilers to help teaching and learning of C and C++. Ch presents a pedagogically effective user-friendly interactive computing environment for the simplest possible teaching/learning computer programming in C so that the students can focus on improving their program design and problem solving skills.
Behrouz A. Forouzan, Richard F. Gilberg
The third edition of Computer Science: A Structured Programming Approach Using C continues to present both computer science theory and C-language syntax with a principle-before-implementation approach. Forouzan and Gilberg employ a clear organizational structure, supplemented by easy-to-follow figures, charts, and tables. The new edition has been thoroughly updated to reflect the new C99 standard, and includes a revised chapter sequence to better aid student learning.